Seeding des Zufallszahlengenerators in JavaScript
Einführung:
JavaScript's Math.random( )-Funktion bietet zwar Zufälligkeit, ermöglicht jedoch kein Seeding. Dies bedeutet, dass die Funktion jedes Mal, wenn sie aufgerufen wird, eine neue Zahlenfolge generiert, was in Situationen problematisch sein kann, in denen wiederholbare Zufallsfolgen gewünscht werden.
Seedbare Pseudozufallszahlengeneratoren:
Da es Math.random() an Seeding-Funktionen mangelt, ist es notwendig, externe Pseudozufallszahlengeneratoren (PRNGs) zu implementieren, die Seeding-Funktionalität bieten. PRNGs liefern qualitativ hochwertige Zufallszahlen und ermöglichen die Initialisierung mit einem oder mehreren Startwerten.
Startwertinitialisierung:
PRNGs erfordern eine ordnungsgemäße Initialisierung, um die Zufälligkeit sicherzustellen. Gut verteilte Startwerte mit hoher Entropie sind entscheidend für eine robuste Zufälligkeit. Hash-Funktionen wie cyrb128 können aus kurzen Strings geeignete Seeds generieren. Alternativ können Dummy-Daten als Auffüllung mit mehreren Generatoriterationen verwendet werden, um den Anfangszustand gründlich zu mischen.
Überlegungen zur Leistung:
JavaScript-Nummern unterstützen nur bis zu 53-Bit Auflösung für ganze ganze Zahlen und 32-Bit-Auflösung für bitweise Operationen. Moderne PRNGs verwenden häufig 64-Bit-Operationen, für die JS-Implementierung sind jedoch Shims erforderlich, die die Leistung drastisch reduzieren können. Die vorgestellten PRNG-Algorithmen priorisieren 32-Bit-Operationen für optimale Leistung in JavaScript.
Empfohlene PRNGs:
sfc32 (Simple Fast Counter)
sfc32 ist ein schnelles PRNG mit einem internen 128-Bit-Status, der sich durch Folgendes auszeichnet JavaScript. Es weist eine ausgezeichnete Zufälligkeitsqualität auf und wird häufig in der PractRand-Zufallszahlentestsuite verwendet.
Beispielverwendung:
function sfc32(a, b, c, d) { return function() { // State update logic ... return (t >>> 0) / 4294967296; // Convert to floating-point number in the range [0, 1) }; } const seedgen = () => (Math.random() * 2 ** 32) >>> 0; const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen());
Beachten Sie, dass das Beispiel eine einfache Seed-Generierung verwendet Methode zu Demonstrationszwecken. In der Praxis sollten robustere Seed-Generierungsmechanismen eingesetzt werden.
Das obige ist der detaillierte Inhalt vonWie kann ich in JavaScript wiederholbare Zufallszahlen generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!