![]() |
Re: Randomize mehrmals starten
Zitat:
Zitat:
|
Re: Randomize mehrmals starten
Zitat:
|
Re: Randomize mehrmals starten
Zitat:
Gern, siehe weiter unten. Zitat:
Ich will dir ja nicht zu nahe treten, aber die ursprüngliche Frage war nicht, welchen Random-Generator man verwenden sollte, sondern, ob man Randomize nur einmal aufrufen sollte. Zitat:
@Neotracer64: Das ist doch keine Vorhersage. Im Prinzip macht ihr doch nichts Anderes als zum Beispiel var oldrs:integer; oldrs:=randseed; ShowMessage(IntToStr(Random(range)); randseed:=oldrs; Was ich in meinem Kommentar weiter oben meinte, ist daß die nächsten "Zufallszahlen" vorhergesagt werden können ohne daß der aktuelle Wert von Randseed bekannt ist. Die "bestimmten" Bedingungen, von denen ich sprach sind 1) Es wird die Random Funktion aus System benutzt, die auch in PredictNextRandom simuliert wird. 2) Der Algorithmus, mit dem der von Random gelieferte Wert in eine "Zufallszahl" umgewandelt wird, muß bekannt sein. 3) Zwischen den einzelnen Aufrufen von Random wird nicht Randomize aufgerufen. Der unter (2) angesprochene Algorithmus, der eine Zahl im Bereich min bis max zurückgibt, könnte zum Beispiel so aussehen:
Delphi-Quellcode:
Wenn wir zum Beispiel "Zufallszahlen" im Bereich 10 bis 60 brauchen können wir dann die "Zufallszahlen" mit
FUNCTION RandomNumber(min,max:integer):integer
begin result:=Random(max-min+1)+min; end; ShowMessage(IntToStr(RandomNumber(10,60))) ausgeben. Ich behaupte nun, daß ich, wenn eine bestimmte Anzahl nacheinander erzeugter Zufallszahlen (in der Reihenfolge der Erzeugung) vorliegen, die nächsten Zahlen vorhersagen kann, ohne daß mir RandSeed bekannt ist. Die Anzahl der Zahlen, die mindestens bekannt sein müssen ergibt sich zum Beispiel für Zahlen im Bereich 10 bis 60 mit min:=10; max:=60; range:=max-min+1 count:=Trunc(LogN(range,$100000000))+1; // = 6 Ihr könnt mich gern testen. 1) Legt min und max fest. Beide müssen im Byte Bereich sein also 0 bis 255. 2) Notiert euch den Wert von RandSeed vor Erzeugung der ersten Zufallszahl (damit das später reproduzierbar ist) 3) Erzeugt mit der o.g. Funktion RandomNumber count+1 Zahlen (zur Sicherheit eine mehr als minimal erforderlich. (ich blamiere mich nicht so gern) 4) Stellt die count+1 Zahlen in die DP, aber bitte nicht den notierten Wert von RandSeed. Der Witz an der Sache ist ja gerade, daß ich den nicht brauche. Und ich brauche dann ein paar Minuten um die nächsten Zahlen zu nennen. Die Beschränkung, daß min und max im Byte Bereich liegen müssen ist, keine grundsätzliche Beschränkung. Ich habe, wie es der Zufall so will, gerade vor ein paar Tagen begonnen, mich mit diesem Thema auseinanderzusetzen, und das Programm, daß die Vorhersage macht ist noch in der Entwicklung und deshalb (noch) auf den Byte Bereich beschränkt. Bei Interesse schreibe ich gern einen kleinen Aufsatz, wie das funktioniert und stelle dann auch gern das Programm mit Source-Code in die DP. Das alles ist übrigens kein Hexenwerk, sondern eigentlich ganz simpel. |
Re: Randomize mehrmals starten
Zitat:
Wer Randomize mehrmals aufrufen möchte, um den Zufall noch zufälliger zu machen, der soll eben einen anderen PRG verwenden. Wieso sollte das weniger mit dem Thema zu tun haben, als Deine Ausführungen? Oder wolltest du einfach mal 'Hallo' sagen? :zwinker: |
Re: Randomize mehrmals starten
Moin,
ich habe mir den Opener nochmal durchgelesen und halte das für die Aufforderung zu einer lockeren Diskussion, die durchaus eine gewisse Breite einnehmen darf, ohne dass sie deshalb off topic wird. Ich finde die Grundlagenarbeit von Klaus interessant. Die Bestimmung der Folgefunktion eines PRG ermöglicht Krypto-Attacken, aber das wusste Borland auch und warnte deshalb stets vor der Verwendung des eigenen PRG in einem Sicherheitskontext. Die Erzeugung einer immer gleichen Folge von quasi zufälligen Zahlen ist übrigens kein Nachteil, sondern eine Entwurfseigenschaft. Die Reproduzierbarkeit ist durchaus gewollt. Der mehrmalige Aufruf von Randomize() stört lediglich die geplante Gleichverteilung der Zufallszahlen, macht den PRG aber deshalb nicht tauglicher für Verschlüsselungsalgorithmen. Freundliche Grüße |
Re: Randomize mehrmals starten
Zitat:
Damit bin ich sehr direkt auf die Frage des Thread-Erstellers eingegangen. |
Re: Randomize mehrmals starten
Also, statistisch gesehen wird die Zufallsfolge schlechter,
wenn du Randomize mehrmals startest ist das Auftraten einer Zahl nicht mehr gleich wahrscheinlich gegen über dem anderer. Wenn du also Rondomize mehrmals aufrufst hast du für die meisten Anwendungen von Pseudozuall eher eine Verschlechterung als eine Verbesserung des Zufalls. Im übrigen gibt es auch echte Zufalls Generatoren, wie sie krypto- Spezialisten benutzen. Diese produzieren Zufallszahlen durch das Messen der Zahl der Zerfälle einer Radioaktiven Substanz und ähnliches. |
Re: Randomize mehrmals starten
Zitat:
Jetz mal ins Praktische überlegt: Der RandSeed ist aber nur dann nicht bekannt, wenn er auf einem anderen Computer (dem Server) ausgeführt wird und die Zufallszahlen zum Client (zu mir) übertragen werden. Dann kann man deine Methode gut benutzen um "vorheruzusagen" (Eigentlich wird hier nirgendwo was vorausgesagt, "ausgerechnet" passt da wohl besser , da haste Recht). Solange aber das Programm auf meinem Computer werkelt, kann ich immer auf den RandSeed im Speicher zugreifen, mache mir also nicht die Mühe das anders auszurechnen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 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