Heim >Backend-Entwicklung >C++ >Warum führt „rand() % 14' zu uneinheitlichen Ergebnissen?
Rand() % 14 generiert ungleichmäßige Werte
Beim Versuch, Zufallswerte innerhalb eines bestimmten Bereichs zu generieren, kann es bei einigen Programmierern zu Problemen kommen ungewöhnliches Verhalten bei Verwendung der Funktion rand(). Ein häufig gemeldetes Problem ist, dass rand() % 14 durchweg Werte von 6 oder 13 zurückgibt.
Um dieses Phänomen zu verstehen, ist es wichtig, sich mit dem zugrunde liegenden Algorithmus von rand() zu befassen. Die spezifische Implementierung, die auf den Maschinen von Apple verwendet wird, basiert auf dem Multiply-with-Carry (MWC) Generator. Eine Schwäche dieses Generators ist leider seine Teilbarkeit durch 7, insbesondere der Multiplikatorwert von 16807.
Daher sind die niederwertigen Bits der ersten paar Zufallszahlen, die unmittelbar nach der Initialisierung von srand() generiert werden, begrenzt Entropie. Im Fall von rand() % 14 hat das niederwertige Bit immer einen identischen Wert, was nur zu zwei möglichen Ergebnissen führt: 6 oder 13.
Um dieses Problem zu mildern, besteht eine einfache Lösung darin, es zu verwerfen die ersten Zufallszahlen, die nach der Initialisierung generiert werden. Durch den mehrmaligen Aufruf von rand() ohne Verwendung der Ergebnisse wird der interne Zustand des Algorithmus chaotischer und die gleichmäßige Werteverteilung wird wiederhergestellt.
Das obige ist der detaillierte Inhalt vonWarum führt „rand() % 14' zu uneinheitlichen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!