Standard seed PRNG in Java
Ich Frage mich, was die Standard-seed für den PRNG* hinter Math.random()
in Java ist. Von dem, was ich verstehe, das man in C basiert auf der system-Uhr. So ist es ähnlich wie in Java? Auch ist der seed geändert jedesmal, wenn Math.random()
genannt wird?
*PRNG = Pseudo Random Number Generator
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Lesen Sie Das Handbuch es sagt Ihnen,
Folgenden mit
java.util.Random()
, die Dokumentation sagtDie aktuelle Implementierung scheint zu sein, basierend auf
System.nanoTime()
aber ändern könnte und immer noch konform mit der Dokumentation ist Vertrag.Da für die änderung der Samen mit jedem Anruf, das ist nicht, wie die Samen funktionieren. PRNGs sind entkernt einmal, und dann produzieren eine Folge von Werten, die sich aus dieser anfänglichen Zustand. Sie sollte nicht, und Java nicht, halten re-seeding.
rand.setSeed(System.currentTimeMillis( ));
es zu sagen, dass diese Anweisung die aktuelle Zeit als Ausgangswert, dann, wenn die aktuelle Zeit ist 20:01, so dass der seeding-oder Start-Wert wird 20 oder 01? oder 2001?Können Sie immer Lesen Sie die code.
Math.random()
nur verwendet ein internes statisches Random-Objekt, das instanziiert ohne args...Wie Sie sehen können auf Dokumentation, die Funktion verwendet eine Klasse namens Random(), wich benutzt einen 48 bit seed, und erzeugen eine gleichmäßige Verteilung.