我試圖生成蘭特隨機數如下:幫助我建立這個隨機數
return a + (rand() % n);
其中a是漂移值(即連續整數的所需範圍的第一個數字)並且n是比例因子(即,連續整數的期望範圍的寬度)。
- Ç如何第六版計劃 - Deitel公司
我把它寫成:
return 1 + (rand() % 1000);
和它的作品,但是當我寫的代碼如下:
return 1000 + (rand() % 1112);
我最終得到了荒謬的大數字,例如1756和1877.那是發生的最後兩個輸出。
我返回值作爲一個整數的printf語句中的函數調用,但我做同樣與工作發言,所以我不認爲這我調用函數的方式。
我在做什麼錯了......?
使用'蘭特()%x'幾乎總是略微向範圍中的較低的數字偏壓(因爲如果'(RAND_MAX + 1)'是不x'的'的精確倍數,有更多的值,其中'蘭特()%x == 0'比'rand()%x == x - 1')。爲了保持一致性,你應該丟棄rand()大於或等於((RAND_MAX + 1)/ x)* x'的任何值,每次從rand()獲得一個新值大。如果你不關心不一致性,這種改進是不必要的;只要知道你正在做的近似。 – 2013-04-06 01:04:14
@JonathanLeffler更妙的是,根本就沒有使用'rand'和用戶一個適當的PRNG) – 2013-04-06 01:54:55