將生成限制在給定範圍內
通常在生成隨機數時,生成一個範圍內的整數或 0.0 到 1.0 之間的 ap 值很有用。雖然可以使用模運算來將種子減少到低整數,但是這使用低位,其經常經歷短週期,如果 N 與 RAND_MAX 成比例地大,則導致分佈的輕微偏斜。
巨集
#define uniform() (rand() / (RAND_MAX + 1.0))
產生 0.0 到 1.0 的 eps 值 - epsilon,所以
i = (int)(uniform() * N)
將 i
設定為 0 到 N-1 範圍內的均勻隨機數。
不幸的是,存在技術缺陷,因為 RAND_MAX 被允許大於 double
可以準確表示的型別的變數。這意味著 RAND_MAX + 1.0
的計算結果為 RAND_MAX,函式偶爾會返回單位。但這不太可能。