C++中介于20和30之间的真随机整数

True random integer between 20 and 30 in C++

本文关键字:之间 随机 整数 C++      更新时间:2023-10-16

如果这很明显,请原谅我,但我在生成范围内的真正随机整数的想法上遇到了一些麻烦,我刚刚开始使用C++。我当前的代码:

int start = rand() % 30 + 20;

总是得到31,因为这是一个"伪随机"整数。它也在30以上!真的随机数可以用这种方式实现吗?还有,我如何才能真正生成一个范围内的数字?

-Jai

普通计算机只能生成伪随机数,
但这并不意味着每次生成的数字都是相同的
你的问题是你忘记了srand,无论哪种方式,兰特都不那么好,
并且公式应该是CCD_ 2。

有关比rand更好的生成器,请参阅Mersenne Twister(包括<random>
对于"真"随机数,您需要特殊的硬件。

在C++中,您可以执行以下操作:

#include <iostream>
#include <random>
#include <chrono>
class Rand_int {
public:
  Rand_int(int low, int high)
    : re(std::chrono::system_clock::now().time_since_epoch().count()),
      dist{low,high} { }
  int operator()() { return dist(re); }
private:
  std::default_random_engine re;
  std::uniform_int_distribution<> dist;
};

int main() {
  Rand_int rnd {20, 30};
  for (int i=0; i<10; i++)
    std::cout << rnd() << 'n';
  return 0;
}