Rand() % 14 Generator gibt begrenzte Werte zurück
In einem aktuellen Programm stieß ein Entwickler auf ein Problem, bei dem rand() % 14 Der Ausdruck erzeugte durchweg nur Werte von 6 oder 13. Obwohl versucht wurde, den Code mehrmals auszuführen, blieben die Ergebnisse konsistent. Das Problem liegt in der Natur des von Apples MCG verwendeten Zufallszahlengenerators.
Wie von Wikipedia erklärt, ist der Multiplikator des MCG von 16807 durch 7 teilbar. Das bedeutet, dass die erste nach srand() generierte Zufallszahl dies tut haben bei Modulo 14 nur ein Bit Entropie, was zu einem begrenzten Wertebereich führt. Dieser Mangel wird auf den von Apple verwendeten Zufallszahlengenerator von geringer Qualität zurückgeführt.
Eine einfache Lösung für dieses Problem besteht darin, rand() mehrmals nach srand() aufzurufen und die ersten Ergebnisse zu verwerfen. Dadurch wird die Entropie der generierten Zahlen erhöht und das Problem der begrenzten Wertausgabe gelöst.
Das obige ist der detaillierte Inhalt vonWarum gibt „rand() % 14' begrenzte Werte für Apples MCG zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!