c++ - rand 在不改变种子的情况下改变值(value)

标签 c++ random random-seed

采用以下程序:

#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(我猜这是默认值)的结果。

最佳答案

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

种子实际上决定了所创建的随机数的顺序。使用不同的种子会给你另外 3 个随机数,但你总是会得到给定种子的这 3 个数字。

如果您想多次使用相同的数字,只需调用一次 rand() 并将其保存在一个变量中即可。

关于c++ - rand 在不改变种子的情况下改变值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032236/

相关文章:

c++ - 类不能包含内部定义枚举的运算符函数?

mysql - 在 MySQL 中生成一个随机字符串

一天后种子发生变化的 Java 随机数

python - 如何找到随机数生成器的种子?

c++ - 如何正确地将指针对象重新用于自定义类

c++ - 将 stringstream 的内容传递给以 char* 为参数的函数

c++ - 控制台标题 C++ , Linux

algorithm - 如何证明采样算法?

c++ - 没有重复的随机数组生成

random_number() 在 GNU 和 PGI fortran 编译器之间给出了截然不同的行为