c++ rand() 微不足道的变化

问题描述 投票:0回答:1

我在尝试生成随机数时遇到了一个问题,它输出每秒递增 3 的升序数字序列。我正在使用 mingw g++ 6.3.0 和以下编译器标志:-std=c++11 -Wall。

例如,运行以下代码并多次运行可执行文件后,它会提供以下输出:

main.cpp:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
  std::srand(std::time(0));

  int rnd = std::rand();
  std::cout << rnd << '\n';

  return 0;
}

控制台输出:

C:\...>make
g++ main.cpp -std=c++11 -Wall    -o a.exe

C:\...>a
21154

C:\...>a
21157

C:\...>a
21157

C:\...>a
21157

C:\...>a
21160

C:\...>a
21160

C:\...>a
21163

C:\...>a
21163
c++ c++11
1个回答
0
投票

好吧,

rand()
将为给定的种子返回相同的数字序列,这就是为什么你每秒都会看到变化(你用以秒为单位的时间来播种它)。

至于每次增加 3,

std::rand
不保证产生任何特定质量的序列,并且您的序列似乎特别不那么好(对于
rand
来说并不罕见)。
<random>
中有质量更好的生成器(请参阅文档此处)。

© www.soinside.com 2019 - 2024. All rights reserved.