C ++中20到30之间的真随机整数

时间:2014-11-09 14:48:43

标签: c++ random

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

int start = rand() % 30 + 20;

总是会产生31,因为这是" psuedo-random"整数。它也超过30! 可以通过这种方式实现真正的随机数,还有,我如何实际生成范围内的数字?

-Jai

2 个答案:

答案 0 :(得分:2)

普通计算机只能生成伪随机数,
意味着每次生成的数字都是相同的 你的问题是你忘了srand,那兰德并不是那么好,
并且公式应为(rand() % 10) + 20

对于比rand更好的发电机,请参见例如。 Mersenne Twister(包括<random>) 对于“真正的”随机数,您需要特殊的硬件。

答案 1 :(得分:1)

在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;
}