14.14 怎樣獲得在一定範圍內的隨機數?

直接的方法是
    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)