Ist 161803398 eine spezielle Nummer? Innerhalb von Math.Random ()


162

Ich vermute, die Antwort lautet " Wegen der Mathematik ", aber ich hatte gehofft, jemand könnte auf einer grundlegenden Ebene ein wenig mehr Einblick geben ...

Ich habe mich heute im BCL-Quellcode umgesehen und mir angesehen, wie einige der Klassen, die ich zuvor verwendet habe, tatsächlich implementiert wurden. Ich hatte noch nie darüber nachgedacht, wie man (Pseudo-) Zufallszahlen generiert, also habe ich mich entschlossen zu sehen, wie es gemacht wird.

Vollständige Quelle hier: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29

private const int MSEED = 161803398; 

Dieser MSEED-Wert wird jedes Mal verwendet, wenn eine Random () -Klasse gesetzt wird.

Wie auch immer, ich habe diese 'magische Nummer' gesehen - 161803398 - und ich habe nicht die geringste Ahnung, warum diese Nummer ausgewählt wurde. Es ist keine Primzahl oder Potenz von 2. Es ist nicht der halbe Weg zu einer Zahl, die bedeutender schien. Ich sah es binär und hexadezimal an und nun, es sah für mich nur wie eine Zahl aus.

Ich habe versucht, in Google nach der Nummer zu suchen, aber nichts gefunden.



6
@ 48klocs: Es steht so in den Dokumenten :The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.
Jesse Good

4
@ 48klocs Ja, Seite 283 hier: apps.nrbook.com/c/index.html Sein Grund scheint "weil Mathe" zu sein.
Eshs

22
@eshs: Interessante Tatsache: Seite 283 Ihres Links zeigt inextp = 31;, aber der Quellcode der RandomKlasse hat es so, als inextp = 21;ob jemand es falsch geschrieben hat, was diesen Fehler verursacht .
Jesse Good

7
@Izkata Wir müssen die Benutzer über das richtige Verhalten informieren (nicht abstimmen, um fälschlicherweise zu schließen), um das langfristige Ziel der Website-Qualität zu erreichen, und nicht nur um das kurzfristige Ziel (keine bestimmte Frage geschlossen zu haben). Und wenn ich nicht auf die obigen Kommentare hingewiesen hätte, wäre es möglicherweise als Duplikat geschlossen worden, weil die Leute das manchmal tun.
Bernhard Barker

Antworten:


141

Nein, aber es basiert auf Phi (dem "goldenen Schnitt").

161803398 = 1.61803398 * 10^8  φ * 10^8

Mehr zum Goldenen Schnitt hier .

Und eine wirklich gute Lektüre für den Gelegenheitsmathematiker hier .

Und ich habe ein Forschungspapier über Zufallszahlengeneratoren gefunden, das dieser Behauptung entspricht. (Siehe Seite 53.)


17
Wissen Sie, warum eine auf Phi basierende Zahl als Samen eine gute Wahl trifft? Wäre es möglich, dies hier zusammenzufassen?
Bernhard Barker

29
@Dukeling Die Konstante wird genau einmal verwendet, um den eingehenden Samen zu temperieren. Mein sehr starker Verdacht ist, dass es so gewählt wurde, dass es nichts in meinem Ärmel ist , was verhindert, dass Samen mit wenigen gesetzten Bits (möglicherweise eine häufige Wahl) den Zufallszahlengenerator (anstelle einer magischen Eigenschaft von Phi) vermasseln.
David Eisenstat

7
Um ein Zitat aus dem genannten Buch zu zitieren Laut Knuth können die obigen Werte durch jedes große MBIG und jedes kleinere (aber immer noch große) MSEED ersetzt werden. Es macht also mehr oder weniger mathematischen Spaß. Die richtige Antwort sollte also lauten: Nein. Aber es basiert auf Phi.
TaW

14
"One can’t even fathom the repercussions if security flaws in the implementation (or design) of the SSL protocol are to be found."
Ich habe

2
Ich würde denken, dass ein relevanterer Weg, den Goldenen Schnitt zu verwenden, darin besteht, (Modul / Phi) zu verwenden, anstatt eine Basis-10-Darstellung der Ziffern im Code zu verwenden, die nichts mit Basis 10 zu tun hat. Ein interessantes Merkmal von Phi, das Ich habe auf dieser Seite nicht gesehen, dass nach dem, was ich für jede ganze Zahl N sagen kann, der Wert N / phi-int (N / phi)> = 1 / N / sqrt (5) ist. Das würde bedeuten, dass selbst wenn man eine Folge von Zahlen N / phi-int (N / phi) erzeugt, der Abstand zwischen dem nächsten Paar innerhalb eines Faktors von sqrt (5) des größtmöglichen gleichmäßigen Abstands in dem Intervall liegt ( 0..1)
Supercat

62

Diese Zahl stammt aus dem Goldenen Schnitt 1,61803398 * 10 ^ 8 . Matt gab eine nette Antwort, was diese Nummer ist, deshalb werde ich nur ein wenig über einen Algorithmus erklären.

Dies ist keine spezielle Nummer für diesen Algorithmus. Der Algorithmus ist Knuths subtraktiver Zufallszahlengenerator-Algorithmus und die Hauptpunkte davon sind:

  • Speichern Sie eine kreisförmige Liste mit 56 Zufallszahlen
  • Bei der Initialisierung wird die Liste gefüllt und anschließend mit einem bestimmten deterministischen Algorithmus randomisiert
  • Es werden zwei Indizes beibehalten, die 31 voneinander entfernt sind
  • Neue Zufallszahl ist die Differenz der beiden Werte an den beiden Indizes
  • Speichern Sie eine neue Zufallszahl in der Liste

Der Generator basiert auf der folgenden Rekursion: X n = (X n-55 - X n-24 ) mod m, wobei n ≥ 0 ist. Dies ist ein Teilfall des verzögerten Fibonacci-Generators : X n = (X n-j @ X n-k ) mod m, wobei 0 <k <j und @ eine beliebige binäre Operation ist (Subtraktion, Addition, xor).

Es gibt verschiedene Implementierungen dieses Generators. Knuth bietet in seinem Buch eine Implementierung in FORTRAN an. Ich habe den folgenden Code mit folgendem Kommentar gefunden:

PARAMETER (MBIG = 1000000000, MSEED = 161803398, MZ = 0, FAC = 1.E-9)

Laut Knuth können die obigen Werte durch jedes große MBIG und jedes kleinere (aber immer noch große) MSEED ersetzt werden.

Ein bisschen mehr finden Sie hier. Beachten Sie, dass dies eigentlich keine Forschungsarbeit ist (wie von Math angegeben), sondern nur eine Masterarbeit.

Die Menschen in der Kryptographie wie irrationale Zahl zu verwenden ( pi, e, sqrt(5)) , weil es eine Vermutung ist , dass Ziffern solcher Zahlen erscheint mit gleicher Frequenz und damit eine hohe haben Entropie . Sie finden diese verwandte Frage unter Security StackExchange , um mehr über solche Nummern zu erfahren. Hier ist ein Zitat:

"Wenn die Konstanten zufällig ausgewählt werden, kann kein Angreifer sie mit hoher Wahrscheinlichkeit brechen." Aber Kryptographen, die paranoid sind, sind skeptisch, wenn jemand sagt: "Verwenden wir diese Konstanten. Ich schwöre, ich habe sie zufällig ausgewählt ." Als Kompromiss verwenden sie Konstanten wie beispielsweise die binäre Erweiterung von π. Obwohl wir nicht mehr den mathematischen Vorteil haben, sie zufällig aus einem großen Pool von Zahlen ausgewählt zu haben, können wir zumindest sicherer sein, dass es keine Sabotage gab.


5
Was die Antwort betrifft, so liegt dies nicht nur an ihrer Entropie, sondern auch daran, dass diese Zahlen in meinen Ärmelnummern nichts sind.
Cole Johnson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.