13 Stimmen

Alternative Entropie-Quellen

Okay, ich schätze, das ist völlig subjektiv und so weiter, aber ich habe über Entropiequellen für Zufallszahlengeneratoren nachgedacht. Die meisten Generatoren werden doch mit der aktuellen Zeit geimpft, oder? Nun, ich war neugierig, welche anderen Quellen verwendet werden könnten, um vollkommen gültige, zufällige (die lose Definition) Zahlen zu erzeugen.

Würde die Verwendung mehrerer Quellen (z. B. Zeit + aktuelle Festplattensuchzeit [wir sind hier phantasievoll]) zusammen eine "zufälligere" Zahl ergeben als eine einzelne Quelle? Wo liegen die logischen Grenzen für die Anzahl der Quellen? Wie viel ist wirklich genug? Wird die Zeit einfach gewählt, weil es bequem ist?

Entschuldigen Sie bitte, wenn dies nicht erlaubt ist, aber ich bin neugierig auf die Theorie hinter den Quellen.

0 Stimmen

Neun. Neun. Neun. Neun. .... Das ist das Problem des Zufalls, man kann nie sicher sein.

0voto

Tim Punkte 19787

Einige verwenden Tastatureingaben (Timeouts zwischen den Tastenanschlägen), ich habe, glaube ich, in einem Roman gehört, dass statischer Radioempfang verwendet werden kann - aber das erfordert natürlich andere Hardware und Software...

0voto

Alex Punkte 8003

Rauschen über dem Spektrum des kosmischen Mikrowellenhintergrunds. Natürlich müssen Sie zunächst Anisotropie, Vordergrundobjekte, korreliertes Detektorrauschen, Galaxien- und lokale Gruppengeschwindigkeiten, Polarisationen usw. entfernen. Viele Fallstricke bleiben .

0voto

Machen Sie sich keine Gedanken über einen "guten" Seed für einen Zufallszahlengenerator. Die statistischen Eigenschaften der Sequenz hängen nicht davon ab, wie der Generator geimpft ist.

Ich stimme nicht zu mit John D. Cooks Ratschläge . Wenn Sie den Mersenne-Twister mit allen Bits außer einem auf Null setzen, erzeugt er zunächst Zahlen, die alles andere als zufällig sind. Es dauert lange, bis der Generator diesen Zustand in etwas umwandelt, das statistischen Tests standhält. Wenn man die ersten 32 Bits des Generators einfach auf einen Seed setzt, hat das einen ähnlichen Effekt. Auch wenn der gesamte Status auf Null gesetzt wird, erzeugt der Generator endlose Nullen.

Richtig geschriebener RNG-Code hat einen richtig geschriebenen Seeding-Algorithmus, der z.B. einen 64-Bit-Wert akzeptiert und den Generator so seedet, dass er für jede mögliche Eingabe anständige Zufallszahlen erzeugt. Wenn Sie also eine zuverlässige Bibliothek verwenden, ist jeder Seed geeignet. Aber wenn Sie Ihre eigene Implementierung zusammenhacken, müssen Sie vorsichtig sein.

0voto

klew Punkte 14589

Die Herkunft des Saatguts ist nicht so wichtig. Wichtiger ist der Algorithmus des Pseudozahlengenerators. Ich habe jedoch vor einiger Zeit von der Erzeugung von Saatgut für einige Bankoperationen gehört. Sie nahmen viele Faktoren zusammen:

  • Zeit
  • Prozessortemperatur
  • Gebläsedrehzahl
  • CPU-Spannung
  • An mehr erinnere ich mich nicht :)

Selbst wenn sich einige dieser Parameter im Laufe der Zeit nicht wesentlich ändern, können Sie sie in eine gute Hash-Funktion einbauen.

Wie erzeugt man eine gute Zufallszahl?

Vielleicht können wir eine unendliche Anzahl von Universen in Betracht ziehen? Wenn es stimmt, dass ständig neue Paralleluniversen entstehen, können wir so etwas tun:

int Random() {
    return Universe.object_id % MAX_INT;
}

In jedem Moment sollten wir uns in einem anderen Zweig der Paralleluniversen befinden, also eine andere Identität haben. Das einzige Problem ist, wie man das Universum Objekt zu bekommen :)

0voto

justinb Punkte 121

Wie wäre es, einen Faden zu spinnen, der eine Variable in einer engen Schleife für eine feste Zeitspanne manipuliert, bevor er beendet wird? Was am Ende dabei herauskommt, hängt von der Prozessorgeschwindigkeit, der Systemlast usw. ab. Sehr kompliziert, aber besser als einfach srand(time(NULL))...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X