C ++中一定范围内的随机数生成

时间:2019-10-22 10:10:06

标签: c++ algorithm random numbers

我有一个问题,我必须在以下条件下生成随机数
     1)数字应为黑白0和1。

2)数字产生的可能性相同

假设我有一个数字x,例如0.0028。如果我将此随机数生成器调用10000次,则它应生成小于x的数字为28。如何实现此目的。有人有什么主意吗?我尝试使用各种发行版,但未能成功获得预期的结果。

2 个答案:

答案 0 :(得分:0)

您正在寻找的是统一分布随机数生成器。这是来自C++ documentation的示例:

编辑:Link to cppreference which contains another example.

它会产生我理解的需要的结果,但是问题中的更多细节会有所帮助。

// uniform_real_distribution
#include <iostream>
#include <random>

int main()
{
  const int nrolls=10000;  // number of experiments
  const int nstars=95;     // maximum number of stars to distribute
  const int nintervals=10; // number of intervals

  std::default_random_engine generator;
  std::uniform_real_distribution<double> distribution(0.0,1.0);

  int p[nintervals]={};

  for (int i=0; i<nrolls; ++i) {
    double number = distribution(generator);
    ++p[int(nintervals*number)];
  }

  std::cout << "uniform_real_distribution (0.0,1.0):" << std::endl;
  std::cout << std::fixed; std::cout.precision(1);

  for (int i=0; i<nintervals; ++i) {
    std::cout << float(i)/nintervals << "-" << float(i+1)/nintervals << ": ";
    std::cout << std::string(p[i]*nstars/nrolls,'*') << std::endl;
  }

  return 0;
}

答案 1 :(得分:0)

您对随机数生成概念的假设有些错误。随机数生成器算法旨在确保在指定范围内选择任何数字的机会几乎相等。但是,它们永远不能保证在所有产生的数字序列中提供均匀的分布。 在这里,您也没有指定生成的随机数的类型。如果为两倍,则由于可能的数字范围很大,可能会产生一些误差。也许尝试使用随机整数可以可接受地解决您的问题。