产生随机数的方法
2008-02-23 05:29:36来源:互联网 阅读 ()
1. 如何产生一定范围内的随机数?
直接的方法是:
rand() % N;
返回从 0 到 N - 1 的数字。但这个方法不好,因为许多随机数发生器的低位比特并不随机。一个较好的方法是:
(int)((double)rand() / ((double)RAND_MAX 1) * N);
假如您不希望使用 double,另一个方法是:
rand() / (RAND_MAX / N 1);
两种方法都需要知道 RAND_MAX,而且假设 N 要远远小于 RAND_MAX。ANSI 规定标准头文档 stdlib.h 中包含 RAND_MAX 的 #define。顺便提一下,RAND_MAX 是个常数,他告诉您 C 库函数 rand() 的固定范围。您不能够设 RAND_MAX 为其他的值,也没有办法需要 rand() 返回其他范围的值。假如您用的随机数发生器返回的是 0 到 1 的浮点值,要取得范围在 0 到 N - 1 内的整数,只要将随机数乘以 N 就能够了。
2. 为什么每次执行程式,rand() 都返回相同顺序的数字?
您能够调用 srand() 来初始化伪随机数发生器的种子,传递给 srand() 的值应该是真正的随机数,例如当前时间:
#include <stdlib.h>
#include <time.h>
srand((unsigned int)time((time_t *)NULL));
请注意,在一个程式执行中多次调用 srand() 并不见得有帮助!不要为了取得“真随机数”而在每次调用 rand() 前都调用 srand()!
3. 我需要随机的真/假值,所以我用直接用 rand() % 2,可是我得到交替的 0, 1, 0, 1, 0 。
这是个低劣的伪随机数生成器,在低位比特中不随机!很不幸,某些系统就提供这样的伪随机数生成器
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 巧用数组减少if语句
下一篇: [C/C 技巧] 提高程式效率的方法
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash