为什么rand出的随机数一模一样?

黑色梧桐叶 2015-07-14 03:19:13
我听说rand用的是电脑时间做种子,然后得到随机数,既然是电脑时间,那不一样的时间应该得到不一样的数啊,为什么这两个不一样的时间得到的数值完全一模一样??


...全文
904 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
love1code 2015-08-01
  • 打赏
  • 举报
回复
我之前写过关于随机数的原理。 http://blog.csdn.net/love1code/article/details/46611519
paschen 2015-08-01
  • 打赏
  • 举报
回复
程序产生的随机数是伪随机数,需要先运行srand初始化种了 建议楼主上网搜索一下产生随机数的原理,之后就会印象深刻了
setoy 2015-07-31
  • 打赏
  • 举报
回复
要用不同的种子: #include <ctime> ... srand(time(0))
Last_stardust 2015-07-31
  • 打赏
  • 举报
回复
因为机器的随机是伪随机,通过一个种子的映射算法得出随机数。如果你想要混乱一点的话可以考虑用机器级的时间(毫秒级)或者是把每次计算的结果设成种子。
自在飞花6541 2015-07-31
  • 打赏
  • 举报
回复
其实,你取得是一列伪随机数,这一列数字是随机的,但是你没从都从这一列数字的同一个地方开始取,那就出问题了
自信男孩 2015-07-29
  • 打赏
  • 举报
回复
事先需要获取一个随机种子~即srand函数~
taoxin78 2015-07-29
  • 打赏
  • 举报
回复
c的话,先根据系统时间设定种子,时间不同种子也就不同了,你现在的程序是一个种子,自然每次都一样了,给你个参考 #define random(x) (rand()%x)//定义随机数范围,根据X决定,如x=100,为百进制 srand((int)time(0));//基于时间产生随机数种子 for(int x=0;x<10;x++) { a[x]=random(100); } for(int i=0;i<10;i++) { printf("-%d-",a[i]);//打印随机数原数组 }
jiqiang01234 2015-07-16
  • 打赏
  • 举报
回复
直接用c++11的random库
lm_whales 2015-07-16
  • 打赏
  • 举报
回复
当然,不使用 srand, 应该会得到同一个 伪随机数序例
lm_whales 2015-07-16
  • 打赏
  • 举报
回复
DOS时代,应该不会这样的, 因为 1)很难同时开启两个实例 2)CPU速度太低,程序两次运行的时间差异应该足够了
lm_whales 2015-07-16
  • 打赏
  • 举报
回复
因为时间变化的粒度不够, 程序的两个实例的time(NULL)调用并取得结果的时间差太小, 不足以改变 time(NULL)的结果 从而造成两个实例的到的time(NULL) 是一样的, 结果生成的伪随机数序例,是同一个序列
leee7338 2015-07-15
  • 打赏
  • 举报
回复
rand前 要先设置随机数种子。百度一下就明白了。
赵4老师 2015-07-14
  • 打赏
  • 举报
回复
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c
/***
*rand.c - random number generator
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines rand(), srand() - random number generator
*
*******************************************************************************/

#include <cruntime.h>
#include <mtdll.h>
#include <stddef.h>
#include <stdlib.h>

/***
*void srand(seed) - seed the random number generator
*
*Purpose:
*       Seeds the random number generator with the int given.  Adapted from the
*       BASIC random number generator.
*
*Entry:
*       unsigned seed - seed to seed rand # generator with
*
*Exit:
*       None.
*
*Exceptions:
*
*******************************************************************************/

void __cdecl srand (
        unsigned int seed
        )
{
        _getptd()->_holdrand = (unsigned long)seed;
}


/***
*int rand() - returns a random number
*
*Purpose:
*       returns a pseudo-random number 0 through 32767.
*
*Entry:
*       None.
*
*Exit:
*       Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/

int __cdecl rand (
        void
        )
{
        _ptiddata ptd = _getptd();

        return( ((ptd->_holdrand = ptd->_holdrand * 214013L
            + 2531011L) >> 16) & 0x7fff );
}
king191923157 2015-07-14
  • 打赏
  • 举报
回复
1,2正解,随机数计算前腰先设置一下随机种子
mewiteor 2015-07-14
  • 打赏
  • 举报
回复
#include<time.h>
用rand()之前:
srand(time(NULL));
www_adintr_com 2015-07-14
  • 打赏
  • 举报
回复
先取电脑时间来调用 srand

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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