13.8 C语言中获得一定范围内的随机数

直接的方法是

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 就可以了。

永不止步步 发表于01-17 15:06 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号