Rand() % 14 generiert nur die Werte 6 oder 13: Das Geheimnis lüften
Das Problem, mit dem Sie konfrontiert sind, entsteht aufgrund der inhärenten Einschränkungen bei der Implementierung der rand()-Funktion auf Apple-Plattformen, wie in der von Ihnen bereitgestellten Antwort erläutert. Mit den Standardparametern erzeugt der von rand() verwendete Zufallszahlengenerator eine Sequenz, die bei Division durch 14 eine begrenzte Entropie aufweist, sodass sie nur zwischen zwei Werten, 6 und 13, wechselt.
Um dieses Problem zu beheben, Sie können die folgenden Schritte ausführen:
-
Rand() nach Srand() mehrmals aufrufen: Wie in der Antwort vorgeschlagen, verwerfen die ersten Ergebnisse, die von rand() nach dem Aufruf von srand(time(NULL)) generiert wurden. Auf diese Weise eliminieren Sie den anfänglichen Zyklus, der nur 6 und 13 erzeugt.
-
Verwenden Sie einen anderen Zufallszahlengenerator: Wenn die oben genannte Methode das Problem nicht löst, sollten Sie einen Wechsel zu einem anderen in Betracht ziehen Zufallszahlengenerator, der eine bessere Entropie liefert, wie zum Beispiel der Mersenne Twister. Alternative Zufallszahlengeneratoren finden Sie in C-Bibliotheken oder als separate Implementierungen.
-
Ändern Sie den Bereich der Zufallszahlen: Wie Sie in der Bearbeitung erwähnt haben, ändern Sie den Bereich von rand() auf 13 oder 15 ermöglicht eine ordnungsgemäße Funktion. Dies liegt daran, dass ein Multiplikator von 15 (z. B. 752574) und 13 (z. B. 220379) nicht durch ihre jeweiligen Reste teilbar ist. Allerdings ist die Änderung des Bereichs möglicherweise nicht für Ihren spezifischen Anwendungsfall geeignet, insbesondere wenn Sie eine Zufallszahl zwischen 0 und 13 benötigen.
Durch die Behebung des zugrunde liegenden Problems mit dem Zufallszahlengenerator auf Apple-Plattformen, Sie können sicherstellen, dass rand() % 14 eine gleichmäßiger verteilte Folge von Werten zwischen 0 und 13 erzeugt.
Das obige ist der detaillierte Inhalt vonWarum generiert „rand() % 14' auf Apple-Plattformen nur 6 und 13?. 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