Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Random: Delphi vs. Lazarus? (https://www.delphipraxis.net/178832-random-delphi-vs-lazarus.html)

Gutelo 30. Jan 2014 23:35

AW: Random: Delphi vs. Lazarus?
 
Zwar abenteuerlich, aber liefert wenigstens halbwegs zufallsaehnliche Zahlen waehrend Random mit Randomize immer identische Abfolgen generiert...

Namenloser 30. Jan 2014 23:46

AW: Random: Delphi vs. Lazarus?
 
Bist du sicher, dass du Randomize auch nur einmalig aufgerufen hast? Ich hatte solche Probleme nur, wenn ich es versehentlich mehrfach aufgerufen hatte oder ganz vergessen hatte.

Deine Implementierung hat dagegen einige Probleme: Das erste if ist meiner Meinung nach komplett sinnlos, da num nach der vorherigen Zeile nie kleiner als 1 sein kann – da stellt man sich beim Lesen erst mal die Frage, ob Autor des Codes überhaupt weiß, was er tut – das sorgt nicht gerade für Vertrauen. Und das Zweite if ist noch schlimmer, denn es sorgt dafür, dass n statistisch häufiger vorkommt als alle anderen Werte.

BUG 30. Jan 2014 23:56

AW: Random: Delphi vs. Lazarus?
 
Dann doch lieber selber einen der besseren Generator implementieren oder die Windows CryptAPI benutzen.
Du hast afaik keine Garantien, das die GUID in Zukunft (spätere Windowsversionen) auch noch "zufällig" genug ist. Aber interessante Idee :mrgreen:

Namenloser 30. Jan 2014 23:58

AW: Random: Delphi vs. Lazarus?
 
Zitat:

Zitat von BUG (Beitrag 1246062)
Windows CryptAPI

Wobei nach den letzten Monaten wohl keiner mehr ernsthaft glaubt, dass das Ding keine Backdoor hat, oder?

Gutelo 31. Jan 2014 00:05

AW: Random: Delphi vs. Lazarus?
 
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?

Namenloser 31. Jan 2014 00:19

AW: Random: Delphi vs. Lazarus?
 
Der Startpunkt ist nicht zufällig – wie auch. Man braucht ja gerade den Zufallsgenerator, um „zufällige“ Werte zu erzeugen. Wie soll man dann einen echt zufälligen Startpunkt für den Zufallsgenerator finden? Ein Computer ist nun mal deterministisch.

Randomize setzt den Startpunkt auf die aktuelle Uptime. Wenn man das in kurzen Abständen hintereinander ausführt, kommen da immer der gleiche oder sehr ähnliche Seeds bei heraus, und dadurch ergeben sich auch immer gleiche oder ähnliche Zahlenfolgen.

cookie22 31. Jan 2014 10:04

AW: Random: Delphi vs. Lazarus?
 
Zitat:

Zitat von Namenloser (Beitrag 1246065)
Wenn man das in kurzen Abständen hintereinander ausführt, kommen da immer der gleiche oder sehr ähnliche Seeds bei heraus, und dadurch ergeben sich auch immer gleiche oder ähnliche Zahlenfolgen.

Ähnliche Seeds ergeben nicht ähnliche Zufallszahlen. Ausserdem kann man den Delphi RNG auch selbst via RandSeed füttern.

Namenloser 31. Jan 2014 10:08

AW: Random: Delphi vs. Lazarus?
 
Zitat:

Zitat von cookie22 (Beitrag 1246112)
Zitat:

Zitat von Namenloser (Beitrag 1246065)
Wenn man das in kurzen Abständen hintereinander ausführt, kommen da immer der gleiche oder sehr ähnliche Seeds bei heraus, und dadurch ergeben sich auch immer gleiche oder ähnliche Zahlenfolgen.

Ähnliche Seeds ergeben nicht ähnliche Zufallszahlen.

Ich hab nicht im Kopf wie der RNG von Delphi genau funktioniert, ich hab nur irgendwann mal die Erfahrung gemacht. Vielleicht lief der Code auch so schnell, dass die Seeds tatsächlich häufig komplett gleich waren.

cookie22 31. Jan 2014 10:30

AW: Random: Delphi vs. Lazarus?
 
Zitat:

Zitat von Namenloser (Beitrag 1246113)
Zitat:

Zitat von cookie22 (Beitrag 1246112)
Zitat:

Zitat von Namenloser (Beitrag 1246065)
Wenn man das in kurzen Abständen hintereinander ausführt, kommen da immer der gleiche oder sehr ähnliche Seeds bei heraus, und dadurch ergeben sich auch immer gleiche oder ähnliche Zahlenfolgen.

Ähnliche Seeds ergeben nicht ähnliche Zufallszahlen.

Ich hab nicht im Kopf wie der RNG von Delphi genau funktioniert, ich hab nur irgendwann mal die Erfahrung gemacht. Vielleicht lief der Code auch so schnell, dass die Seeds tatsächlich häufig komplett gleich waren.

Darum sollte man ja Randomize nicht zu schnell zu oft aufrufen. :P

gammatester 31. Jan 2014 10:33

AW: Random: Delphi vs. Lazarus?
 
Noch mal zum Thema Geschwindigkeit vs. Sicherheit bzw Periodenlänge: So einfach wie hier zusammengefaßt
Zitat:

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

ist die Lage nicht. Wenn man sich meine Tabelle http://www.wolfgang-ehrhardt.de/misc_de.html#prng ansieht, erkennt man das Delphi random nur ca 10% schneller als der Mersenne Twister ist, aber 30% langsamer als X0R4096 und immer noch 15% langsamer als mein 'Standard'-Generator Taus88. Selbst der kryptografische ISAAC-Generator ist nur ca 18% langsamer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz