【发布时间】:2012-04-19 09:46:51
【问题描述】:
采取以下程序:
#include <cstdlib>
using std::rand;
#include <iostream>
using std::cout;
int main()
{
cout << rand() << ' ' << rand() << ' ' << rand() << '\n';
}
由于rand 产生相同的值,只要不使用srand 更改种子,这应该产生三个相同的数字。
例如
567 567 567
但是,当我运行这个程序时,它给了我三个不同的值。
例如
6334 18467 41
当程序再次(编译和)运行时,会生成相同的三个数字。在我开始从rand 获得不同的结果之前,我不应该使用srand 来更改种子吗?这只是我的编译器/实现试图帮我一个忙吗?
操作系统:Windows XP
编译器:GCC 4.6.2
库:MinGW
编辑:
通过尝试使用srand,我发现这是种子 1 的结果(我猜这是默认值)。
【问题讨论】:
-
+1 简称,完整的示例程序。 +1 用于显示程序产生的内容。 +1 用于展示您期望它产生的效果。
-
您是在建议在每次调用 rand 之前都需要为随机数生成器播种?这听起来更像是用户生成的数字,而不是随机生成的数字。
-
如果
rand在一个函数中的所有出现都给出了相同的结果,那么它根本就没有用。 -
@chris:我认为你记错了你的学习。您可能被告知更像是“您需要在开始使用随机数生成器之前为其播种,否则您每次都会得到相同的 sequence 值”
标签: c++ random random-seed