直接的方法是
rand() % N /* 不好 */
試圖返回從?0?到?N
- 1?的數(shù)字。但這個方法不好, 因為許多隨機數(shù)
發(fā)生器的低位比特并
不隨機, 參見問題?
13.16。
一個較好的方法是:
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
如果你不希望使用浮點, 另一個方法是:
rand() / (RAND_MAX / N + 1)
兩種方法都需要知道?RAND_MAX, 而且假設(shè)?N?要遠遠小于?RAND_MAX。
?RAND_MAX?在?ANSI?里?#define?在?<stdlib.h>。
順便提一下, RAND_MAX?是個常數(shù), 它告訴你?C?庫函數(shù)?rand()?
的固定范圍。你不可以設(shè)?RAND_MAX?為其它的值, 也沒有辦法要求?rand()?
返回其它范圍的值。
如果你用的隨機數(shù)發(fā)生器返回的是?0?到?1?的浮點值, 要取得范圍在?0?到
?N - 1?內(nèi)的整數(shù), 只要將隨機數(shù)乘以?N?就可以了。