Heim >Backend-Entwicklung >C++ >Warum gibt „rand() % 14' manchmal nur 6 oder 13 zurück?
Rand() % 14: Das Geheimnis sich wiederholender Werte aufdecken
In der Programmierung wird die Funktion rand() häufig zum Generieren von Zufallswerten verwendet Zahlen. Einige Benutzer sind jedoch auf ein interessantes Problem gestoßen, bei dem der Ausdruck rand() % 14 durchweg nur 6 oder 13 erzeugt.
Um dieses Verhalten zu verstehen, schauen wir uns die Funktionsweise von rand() genauer an. Es nutzt den Mersenne Congruential Generator (MCG)-Algorithmus von Apple, der einen bestimmten Multiplikator beinhaltet. Leider ist dieser Multiplikator durch 7 teilbar, was zu einem unregelmäßigen Verhalten bei der Generierung von Zufallszahlen innerhalb eines begrenzten Bereichs führt.
Konkret weist die erste Zufallszahl, die nach dem Aufruf von srand() generiert wird, nur ein Bit Entropie Modulo 14 auf. Das bedeutet, dass es nur zwei mögliche Werte annehmen kann: 6 oder 13.
Um dieses Problem zu umgehen, gibt es eine einfache Lösung. Rufen Sie rand() einfach ein paar Mal auf und verwerfen Sie die Ergebnisse, um Zufälligkeit einzuführen. Dadurch wird sichergestellt, dass die erste in rand() % 14 verwendete Zufallszahl nicht durch das anfängliche Seeding beeinflusst wird.
Das obige ist der detaillierte Inhalt vonWarum gibt „rand() % 14' manchmal nur 6 oder 13 zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!