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