我的理解是RAND_MAX取決於機器的體系結構。如果機器是32位,比rand()只能產生高達4字節的東西。如何用rand()在64位機器上生成32位隨機整數?如何在C++中生成隨機32位整數
另外,如果我想隨後用rand()生成數十億隨機整數,我是否總是需要srand()?
我的理解是RAND_MAX取決於機器的體系結構。如果機器是32位,比rand()只能產生高達4字節的東西。如何用rand()在64位機器上生成32位隨機整數?如何在C++中生成隨機32位整數
另外,如果我想隨後用rand()生成數十億隨機整數,我是否總是需要srand()?
由於您已經在使用rand(),所以您可能不必擔心這個時間段,因此您可以屏蔽高位。
一般而言,您應該在程序頂部執行一次類似於srand(time(NULL))
的操作。否則,每次運行程序時,都會產生相同數量的十億個隨機數。
使用rand()與bit-hacking會受到嚴重的阻礙,因爲它在很多情況下可能導致隨機性問題。
C++的11 <random>
頭定義了所有必要的工具來生成任何類型的良好品質的隨機號碼,包括任意長度的整數,浮點,等...
我建議看這個:https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
只是把它關掉...'(uint32)rand()' – ASKASK
隨着c + + 11有一個完整的標頭充滿了好吃的東西:http://en.cppreference.com/w/cpp/header/random –
oakad
你可能只需要調用rand兩次,並將結果合併成一個32位int,如:(rand()^(rand()<< 1))。但我不知道這是否會給出下降分佈或不... – glampert