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