c – std :: uniform_real_distribution包含范围

C 11 std :: uniform_real_distribution(-1,1)给出范围[-1,1)中的数字.

您将如何在[-1,1]范围内获得统一的实际分布?

实际上这可能并不重要,但在逻辑上我正在尝试选择包含范围内的值.

解决方法

如果您从查看整数开始,这更容易考虑.如果你通过[-1,1],你会得到-1,0.因为你想要包含1,你将通过[-1,(1 1))或[-1,2).现在你得到-1,1.

你想做同样的事情,但双打:

this answer借:

#include <cfloat> // DBL_MAX
#include <cmath> // std::nextafter
#include <random>
#include <iostream>

int main()
{
  const double start = -1.0;
  const double stop = 1.0;

  std::random_device rd;
  std::mt19937 gen(rd());

  // Note: uniform_real_distribution does [start,stop),//   but we want to do [start,stop].
  //   Pass the next largest value instead.
  std::uniform_real_distribution<> dis(start,std::nextafter(stop,DBL_MAX));

  for (auto i = 0; i < 100; ++i)
  {
    std::cout << dis(gen) << "\n";
  }
  std::cout << std::endl;
}

(见代码运行here)

也就是说,在所需的值之后找到下一个最大的double值,并将其作为结束值.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...