如何让随机数生成器正常工作

How to get random number generator to work properly

本文关键字:工作 常工作 随机数生成器      更新时间:2023-10-16

我的代码处理两个骰子(一个 10 面的"公平"骰子和一个 20 面的"公平"骰子(,并使用类、数组和随机数生成器来生成两个骰子的随机掷骰子及其总和,但我的所有代码都吐出"你掷出:18"。这不是很随机的。


#include <iostream>
#include <stdlib.h>
using namespace std;
class Dice
{
  private:
  int rollDice[2] = {};
  public:
  void setval1(int x)
  {
    rollDice[0] = x;
  }
  void setval2(int y)
  {
    rollDice[1] = y;
  }
  double getVal1()
    {
      return rollDice[0];
    }
  double getVal2()
  {
    return rollDice[1];
  }
};
int main()
 {
  Dice a;
  a.setval1(rand()%9+1);
  a.setval2(rand()%19+1);
  cout << "You rolled: " << a.getVal1() + a.getVal2();
}

从文档中:

您需要为 使用的伪随机数生成器设定种子 std::rand((.如果在调用 srand(( 之前使用 rand((,则 rand(( 表现得好像是用 srand(1( 播种的。

每次 rand(( 播种相同的种子时,它必须产生 相同的值序列。

C++中的正确用法是这样的:

std::srand(std::time(nullptr)); // use current time as seed for random generator
int random_variable = std::rand();

如果你想要一个特定的统计分布,你应该看看标题随机文档