AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Random: Delphi vs. Lazarus?

Ein Thema von AlexII · begonnen am 30. Jan 2014 · letzter Beitrag vom 7. Feb 2014
Antwort Antwort
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#1

AW: Random: Delphi vs. Lazarus?

  Alt 30. Jan 2014, 17:15
Um es nochmal zusammenzufassen: Delphi verwendet einen linearen Kongruenzgenerator während FreePascal einen Mersenne Twister benutzt.

Das heißt, dass Delphi einen sehr schnellen, aber für viele ernsthafte Anwendungen von Zufallzahlen unbrauchbaren, Generator hat. Dafür ist der Generator von FreePascal langsamer.

Auf Wikipedia gibt es auch eine schöne Übersicht.

Geändert von BUG (30. Jan 2014 um 17:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#2

AW: Random: Delphi vs. Lazarus?

  Alt 30. Jan 2014, 18:36
Für ernsthafte Anwendung kann man ja notfalls auch einen den vielen alternativen Zufallsgeneratoren verwenden.

Im DEC war auch einer drin und wenn es ganz sicher sein muß, dann gäbe es auch spezielle hardwarebasierte Systeme.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Random: Delphi vs. Lazarus?

  Alt 30. Jan 2014, 21:36
Habe ich richtig verstanden?

Delphi - linearer Kongruenzgeneratoren - 2^32 = schnell, aber nicht sehr sicher.
Lazarus - Mersenne-Twister Pseudozufallszahlengenerator - (2^19937)−1 = langsam, aber dafür viel sicherer?

Also doch sehr unterschiedlich.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII (30. Jan 2014 um 21:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Random: Delphi vs. Lazarus?

  Alt 30. Jan 2014, 23:07
langsam, aber dafür viel sicherer?
Was heißt hier sicher? Für kryptographische Anwendungen sind beide Generator-Typen nicht geeignet.
Der Unterschied ist aber trotzdem wichtig, z.B. wenn man randomisierte Algorithmen einsetzen will (Monte-Carlo-Simulation, usw.).

Wenn du Spaß mit Verschlüsselung haben willst, programmiere lieber einen Standard nach

Geändert von BUG (30. Jan 2014 um 23:58 Uhr)
  Mit Zitat antworten Zitat
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#5

AW: Random: Delphi vs. Lazarus?

  Alt 30. Jan 2014, 23:29
Als Alternative zu Random kannst du auch die GUID von Windows verwenden. Nach meinen Erfahrungen sind die resultierenden Zufallswerte recht gut und liefern auch eine brauchbare Statistik. Hier ein Beispiel:

Code:
// get random number via GUID
function random_GUID(n : integer) : integer;
var Guid : TGUID;
    num : integer;
begin
    CreateGUID(Guid);
    num := Trunc(1 + (n*(Guid.D2/65535)));
    if num = 0 then num := 1;
    if num = n+1 then num := n;
    Result := num;
end;
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Random: Delphi vs. Lazarus?

  Alt 30. Jan 2014, 23:32
Ist ja abenteuerlich...
  Mit Zitat antworten Zitat
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#7

AW: Random: Delphi vs. Lazarus?

  Alt 30. Jan 2014, 23:35
Zwar abenteuerlich, aber liefert wenigstens halbwegs zufallsaehnliche Zahlen waehrend Random mit Randomize immer identische Abfolgen generiert...
  Mit Zitat antworten Zitat
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#8

AW: Random: Delphi vs. Lazarus?

  Alt 31. Jan 2014, 00:05
Dass das erste if keinen Sinn macht gebe ich dir Recht. Ist ein Relikt einer vorherigen Implementation in der das 1+ nicht im Trunc war. Aendert aber nichts an der Funktionalitaet.

Bezueglich des zweiten ifs: Auch dieser Einwand ist richtig. Allerdings ist der Einfluss sehr gering und die resultierenden statitischen Verteilungen sind vielfach besser als bei Random. Wenn jemand eine Idee hat wie man die Randbedingung ohne Grossen Aufwand besser loest waere ich dankbar.

Randomize hatte ich nur einmal vorher aufgerufen. Sehe aber auch keinen Grund warum man es nicht oefter aufrufen duerfte. Nach meinem Verstaendnis setzt Randomize nur einen beliebigen Startpunkt fest von dem aus die weiteren Werte mit Random bestimmt werden. Da der Startpunkt zufaellig ist sollte man Randomize doch auch beliebig aufrufen duerfen, oder nicht?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz