一个想不通的问题有关随机数的rand()函数的!

diqiecao 2005-07-18 09:18:30
我用rand()函数得到一个随机数

例如我第一次随机选了一个78406
我退出程序在进入在选还是78406
每次退出在进都是这个数这是为什么呢
不只是第一个数是这样
第二个数
第三个数
......
也是分别相同的

...全文
238 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2005-11-04
  • 打赏
  • 举报
回复
Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令

听说过。

真正的随机数,只有通过硬件得到。
hyamw 2005-11-04
  • 打赏
  • 举报
回复
Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令
真的假的?没有研究过。
我看到的资料都是说随机数是由算法根据种子产生的,所以如果你不改变随机种子,每次产生的随机序列都是一样的。
fisker0303 2005-11-04
  • 打赏
  • 举报
回复
.....Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令

我是来崇拜这句话的.
Snow_Ice11111 2005-11-04
  • 打赏
  • 举报
回复
同意newbiestar() 的看法,的确“如果你多次调用并且调用间隔很小的话,就会产生一样的种子”。

至于“通过噪声电流产生随机数的指令”,不知哪位高人有更多资料请说说看法。
yeti0210 2005-11-04
  • 打赏
  • 举报
回复
.....Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令
汗~~~~~
ShiGang 2005-11-04
  • 打赏
  • 举报
回复
在用之前加一句:
srand(time(NULL));
newbiestar 2005-11-04
  • 打赏
  • 举报
回复
一不小心用错马甲,给个URL作参考
http://www.xfocus.net/articles/200209/451.html(中文的资料)

有兴趣的自己到Intel.com去找找Intel的白皮书……
antijpn 2005-11-04
  • 打赏
  • 举报
回复
我承认,我记错了……不是CPU而是芯片组……

有兴趣的google Intel RNG就可以知道了,不过有一点我没有说错,这个东西的确是硬件相关的……
newbiestar 2005-07-18
  • 打赏
  • 举报
回复
rand产生的不是真正的随机数,而是存在一个随机数分布表,每次都根据你给定的seed在表中进行一定的计算找出一个随机数来。

要通过srand产生种子,不过srand(n),n每次都一样的话,给出的随机数还是一样的(上面那个里面用time(0)的方法要小心点,如果你多次调用并且调用间隔很小的话,就会产生一样的种子)……

如果需要真正的随机数,查一下Intel的文档,Intel在自己的CPU里面实现了通过噪声电流产生随机数的一条指令。
casinosun 2005-07-18
  • 打赏
  • 举报
回复
加一句srand(time(0)); 就行

bohut 2005-07-18
  • 打赏
  • 举报
回复
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;

}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧