rand改变值而不改变种子

时间:2012-04-05 16:17:05

标签: c++ random random-seed

采取以下计划:

#include <cstdlib>
using std::rand;

#include <iostream>
using std::cout;

int main()
{
    cout << rand() << ' ' << rand() << ' ' << rand() << '\n';
}

由于rand生成相同的值,只要未使用srand更改种子,因此应生成三个相同的数字。
e.g。

567 567 567

然而,当我运行这个程序时,它给了我三个不同的值 e.g。

6334 18467 41

当程序(编译并)再次运行时,会生成相同的三个数字。在开始从srand获得不同结果之前,我是否不得不使用rand更改种子?这只是我的编译器/实现试图帮我一个忙吗?

操作系统:Windows XP
编译:GCC 4.6.2
图书馆:MinGW

编辑: 通过尝试使用srand,我发现这是种子1的结果(我猜是默认的)。

2 个答案:

答案 0 :(得分:4)

每次调用rand()多次有意产生不同的随机数。

除非你的程序为每次运行调用srand()不同的值,否则每次运行的顺序都是相同的。

您可以使用srand()时间来使每个序列的整个序列不同。您也可以使用已知值调用srand()来重置序列 - 对测试很有用。

请参阅rand()srand()的文档。

答案 1 :(得分:4)

每次调用rand()都会生成不同的随机数。

种子实际上决定了创建的随机数序列。使用不同的种子将获得另外3个随机数,但您将始终获得给定种子的这3个数字。

如果您希望多次使用相同的号码,只需拨打rand()一次,然后将其保存在变量中。