我正在學習編程課程,我們正在使用C++。 我們有一個任務,在某些時候,我們需要編寫一個函數,以[上限,下限]間隔返回一個隨機數。我用下面的:隨機數生成問題
lower + (int) (upper * (rand()/(RAND_MAX + 1.0)));
我沒有忘記用srand((unsigned int) time(0))
改變srand
。
但是,我每次都得到相同的價值!我請求教授尋求幫助,經過一番調查,他發現rand()
生成的第一個數字不是隨機的......高階位保持不變,並且由於此實現使用它們,所以最終結果不是完全是我所期望的。
是否有一個更優雅,但簡單的解決方案,而不是放棄第一個值或使用餘數來實現我想要的?
非常感謝您的關注!
〜Francisco
編輯:謝謝大家的意見。我不知道rand()
是這樣一個很爛的RNG:P
是不是'rand()'過時了?我認爲現在每個人都應該使用'random()'。 – 2010-03-10 19:39:20
'lower + rand()%(upper - lower + 1)'有什麼問題?你爲什麼不想用餘數? – IVlad 2010-03-10 19:39:53
只是在說我也注意到了這一點。如果你實際上每次發現它不完全相同時打印出第一個rand(),但這些數字都相當接近。例如,現在當我連續多次開始一個程序時,我都會將數字全部在23000範圍內,例如作爲第一個數字。之後,數字更隨機。我一直只是拋棄了像你提到的第一個rand()數字。 – 2010-03-10 19:42:29