将生成限制在给定范围内

通常在生成随机数时,生成一个范围内的整数或 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,函数偶尔会返回单位。但这不太可能。