Heim >Backend-Entwicklung >C++ >Warum gibt „rand() % 14' manchmal nur 6 oder 13 zurück?

Warum gibt „rand() % 14' manchmal nur 6 oder 13 zurück?

DDD
DDDOriginal
2024-11-25 10:34:11424Durchsuche

Why Does `rand() % 14` Sometimes Only Return 6 or 13?

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!

Stellungnahme:
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