一个想不通的问题有关随机数的rand()函数的! 我用rand()函数得到一个随机数 例如我第一次随机选了一个78406我退出程序在进入在选还是78406每次退出在进都是这个数这是为什么呢不只是第一个数是这样第二个数第三个数......也是分别相同的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 rand()返回的是虚假的随机数.默认的种子是1.你可以通过srand()来改变它.但是调用srand()就意味着你已经得到了随机数?下面的代码看上去是得到一个随机数,但是事实并非如此:#include <stdlib.h> /* header for rand() and srand() */ #include <stdio.h> /* io header */ int main() { srand(rand()); for(int i=0;i<=9;i++) printf("%d\n",rand()); return 0; } 每运行一次,其输出都是一个结果,您可以测试一下.也就是说要是程序在每次启动需要不同的随机数,这个方法是不可行的.如何来解决?上面提及的srand()可以改变种子的值.但是如果你将它设为常量,那么随机数列也就是常量.可以用srand(time(0))来解决.time()返回一个time_t.你可以认为它是一个整型(int),并且值是不同的.那么,我们现在可以这么写代码来实现要求:#include <stdlib.h> /* header for rand() and srand() */#include <stdio.h> /* io header */#include <time.h> /* header needed for time() */ int main() { srand(time(0)); for(int i=0;i<=9;i++) printf("%d\n",rand()); return 0; } rand产生的不是真正的随机数,而是存在一个随机数分布表,每次都根据你给定的seed在表中进行一定的计算找出一个随机数来。要通过srand产生种子,不过srand(n),n每次都一样的话,给出的随机数还是一样的(上面那个里面用time(0)的方法要小心点,如果你多次调用并且调用间隔很小的话,就会产生一样的种子)……如果需要真正的随机数,查一下Intel的文档,Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令。 .....Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令 汗~~~~~ 同意newbiestar() 的看法,的确“如果你多次调用并且调用间隔很小的话,就会产生一样的种子”。至于“通过噪声电流产生随机数的指令”,不知哪位高人有更多资料请说说看法。 .....Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令我是来崇拜这句话的. Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令真的假的?没有研究过。我看到的资料都是说随机数是由算法根据种子产生的,所以如果你不改变随机种子,每次产生的随机序列都是一样的。 Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令听说过。真正的随机数,只有通过硬件得到。 我承认,我记错了……不是CPU而是芯片组……有兴趣的google Intel RNG就可以知道了,不过有一点我没有说错,这个东西的确是硬件相关的…… 一不小心用错马甲,给个URL作参考http://www.xfocus.net/articles/200209/451.html(中文的资料)有兴趣的自己到Intel.com去找找Intel的白皮书…… 在用之前加一句:srand(time(NULL)); 在做网络爬虫,求资源 关于视频实时处理 子窗体里创建的CToolBar怎么没法添加命令更新函数来使得按钮可以禁止(灰化) 关于注册表函数RegQueryValueEx问题 散分! 把文件写入文本的问题。。。。。。(请教) 谁有最优路径的程序啊,能否共享一下??哭泣的恳求各位,拜托了!绝对100分,不够再加 如何读取AX通用寄存器的数据? who know how to get the first cluster number of the file or directory in win95 and win98 如何得到任务栏快捷方式的句柄? 请教DLL问题 提问关于颜色的问题
#include <stdio.h> /* io header */
int main()
{ srand(rand()); for(int i=0;i<=9;i++)
printf("%d\n",rand()); return 0;
} 每运行一次,其输出都是一个结果,您可以测试一下.也就是说要是程序在每次启动需要不同的随机数,这个方法是不可行的.如何来解决?上面提及的srand()可以改变种子的值.但是如果你将它设为常量,那么随机数列也就是常量.可以用srand(time(0))来解决.time()返回一个time_t.你可以认为它是一个整型(int),并且值是不同的.那么,我们现在可以这么写代码来实现要求:#include <stdlib.h> /* header for rand() and srand() */#include <stdio.h> /* io header */#include <time.h> /* header needed for time() */ int main() { srand(time(0)); for(int i=0;i<=9;i++) printf("%d\n",rand()); return 0; }
汗~~~~~
真的假的?没有研究过。
我看到的资料都是说随机数是由算法根据种子产生的,所以如果你不改变随机种子,每次产生的随机序列都是一样的。
http://www.xfocus.net/articles/200209/451.html(中文的资料)有兴趣的自己到Intel.com去找找Intel的白皮书……
srand(time(NULL));