Heim > Backend-Entwicklung > C++ > Warum gibt „rand() % 14' begrenzte Werte für Apples MCG zurück?

Warum gibt „rand() % 14' begrenzte Werte für Apples MCG zurück?

Mary-Kate Olsen
Freigeben: 2024-11-28 00:20:10
Original
670 Leute haben es durchsucht

Why Does `rand() % 14` Return Limited Values on Apple's MCG?

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage