C++11中的闭区间随机数生成

6
下面的代码默认生成[0,PI)之间的数字:
#include <iostream>
#include <random>
int main()
{
  std::random_device rd;
  std::default_random_engine re(rd());
  //std::uniform_real_distribution<double> unifPhi(0., M_PI);//[0.,PI) // <- default
  std::uniform_real_distribution<double> unifPhi{0.0, std::nextafter(M_PI, 2.*M_PI)};//probably [0.,PI]
  for(unsigned int i=0u;i<10u;++i)
    std::cout << unifPhi(re) << std::endl;

  return 0;
}

我想生成一个在[0,PI]之间的数。明确一下,第二个括号必须是]而不是)(表示闭区间)。

有人可以告诉我上面的代码是否正确吗?


你如何知道它们的区别?在真正的均匀分布中,P(PI) = P(x) = 0,其中0 <= x < PI。 - user515430
1
@user515430 因为浮点数不是实数,它们是离散的。在区间 [0,M_PI]float/double/long double 的数量是有限的,且恰好比区间 [0, M_PI) 中的数量多一个。 - Casey
@Casey 我知道这一点。我更想知道OP试图解决的问题,它依赖于你所陈述的事实。 - user515430
1个回答

3

看起来是正确的。在这里,它说生成的值将在范围[a, b)内。因为a = 0,而b是大于M_PI的最小数,所以你应该得到一个在[0,PI]范围内的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接