C++随机数 rand()函数.

japt88_115656292 2012-03-29 11:54:44
1 #include <iostream>
2 #include <cstdlib>
3 using namespace std;
4
5 int main()
6 {
7 cout<<rand()<<endl;
8 }

随机种子默认是1,我的执行结果是
1804289383

如果别人跑这段程序,默认种子也会是1.所以我和别人得到的随机数结果是一样的,我这样理解有错吗?
哪位大哥跑一下,我的运行环境是redhat的虚拟机.
...全文
302 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
muyi66 2012-03-30
  • 打赏
  • 举报
回复
我的回复又被吃掉了?
muyi66 2012-03-30
  • 打赏
  • 举报
回复
对,那样就是一样的。除非你的编译器居然没用伪随机数算法。
japt88_115656292 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

你要是设置同样的种子,在同一个编译器编译出来的的程序表现就是一样的。

但不同的编译器可能就采用了不同的计算参数,那结果当然两样。
[/Quote]
那你确定,如果别人和我都用一样的操作系统,一样的编译器,那么我们同样的种子产生的随机数就是一样的?
muyi66 2012-03-30
  • 打赏
  • 举报
回复
你要是设置同样的种子,在同一个编译器编译出来的的程序表现就是一样的。

但不同的编译器可能就采用了不同的计算参数,那结果当然两样。
japt88_115656292 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

在我的机器上跑出来的是41

这个主要影响应该是编译器吧
[/Quote]
你们说的这些影响都没有说服力阿,编译器,操作系统,这些都可以很容易做到一样的,但是一样的话,种子一样随即出来的数值就一样吗?
luo6620378xu 2012-03-30
  • 打赏
  • 举报
回复


/*这是其中的一种实现
引用自《THE STANDARD C LIBRARY》--P J. PLAUCER
楼主可以自推敲一下
*/
#define RAND_MAX 32767

unsigned long _Randseed = 1;
int rand(void)
{

_Randseed = _Randseed*1103515245+12345;
return ( (unsigned int) (_Randseed >> 16) &RAND_MAX) ;
}

void srand (unsigned int seed)
{
_Randseed = seed;
}




japt88_115656292 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

伪随机数的特色就是如此,同样的种子下每次都输出同一个序列。前些天我写了个真随机数类,可以避免出现这样的现象,每次调用RandomDigit::RealRandom()得到的数字都是不可预测的,没有固定的序列。
http://blog.csdn.net/muyi66/article/details/7392941
[/Quote]
大家怎么都不能正面回答我问题啊,同样的种子下每次都输出同一个序列,我知道阿,那么2台不同的计算机,种子一样,输出的随机数也是一样吗?如果不一样是什么造成的。

@taodm快来啊
muyi66 2012-03-30
  • 打赏
  • 举报
回复
在我的机器上跑出来的是41

这个主要影响应该是编译器吧
muyi66 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

跑一下啊.为什么不一样呢,函数方法都写好的,
[/Quote]不跑是因为不同的环境有影响,不是每个编译器都用同样的方式初始化。
japt88_115656292 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

有错,随机数产生的算法是与实现相关的,只能知道同一个种子在同一个随机函数下会产生同样的随机序列.不能保证在别的环境也生成这样的序列.
[/Quote]
别的环境 举例子阿 什么环境阿,如果是操作系统,那么2个人操作系统一样,那么随机数就一样?
muyi66 2012-03-30
  • 打赏
  • 举报
回复
伪随机数的特色就是如此,同样的种子下每次都输出同一个序列。前些天我写了个真随机数类,可以避免出现这样的现象,每次调用RandomDigit::RealRandom()得到的数字都是不可预测的,没有固定的序列。
http://blog.csdn.net/muyi66/article/details/7392941
japt88_115656292 2012-03-30
  • 打赏
  • 举报
回复
跑一下啊.为什么不一样呢,函数方法都写好的,
iamnobody 2012-03-30
  • 打赏
  • 举报
回复
有错,随机数产生的算法是与实现相关的,只能知道同一个种子在同一个随机函数下会产生同样的随机序列.不能保证在别的环境也生成这样的序列.

muyi66 2012-03-30
  • 打赏
  • 举报
回复
不同的机器种子不一定一样,因为编译器不同,对种子的初始化方法也就不一定相同。

同时同样的种子也未必得到同样结果,因为不同的编译器可能使用了不同实现方式的库函数。不同的库函数实现方式算出来的序列自然也不同,除非他们正好选用了完全相同的算法和参数。
japt88_115656292 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

对,那样就是一样的。除非你的编译器居然没用伪随机数算法。
[/Quote]
还是你的想法应该我可以接受。关键没法测试,呵呵
japt88_115656292 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

种子一样就是一样的。在虚拟机和本机可以跑啊
[/Quote]
现实情况 你的机器 和我的机器 ,我们都跑这段程序,种子是一样的,但是结果不一样,原因呢?
exgalaxy 2012-03-30
  • 打赏
  • 举报
回复
种子一样就是一样的。在虚拟机和本机可以跑啊
SuperLy 2012-03-30
  • 打赏
  • 举报
回复
除了种子外,其实真正关键的是看rand()库函数的实现算法是否相同,如果算法不同,那么基本上结果就不同。
japt88_115656292 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

lz想知道一样一样的 然后改造历史 让他不一样一样的
[/Quote]
你说的是人话嘛?
薄樱鬼_girl 2012-03-30
  • 打赏
  • 举报
回复
呵呵,这个问题有待研究,大家不要把气氛搞得那么紧张吗
加载更多回复(5)

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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