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 就可以了。
參考資料: [K&R2, Sec. 7.8.7 p. 168]; [PCS, PCS Sec. 11 p. 172]。
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)