使用boost::random库获取整数随机值而不是实数

Getting integer random values instead of real values using boost::random library

本文关键字:实数 随机 整数 boost random 获取 使用      更新时间:2023-10-16

我正在尝试使用boost::random库获取真实的随机值。这是我的代码:

#include <iostream>
#include <boost/random/uniform_real_distribution.hpp>
#include <boost/random/mersenne_twister.hpp>
boost::random::mt19937 eng = boost::random::mt19937();
boost::random::uniform_real_distribution<double> urd =
   boost::random::uniform_real_distribution<double>(0,20);
for (int i = 0; i <= 100; i++)
   std::cout << urd(eng) << std::endl;

但我得到的是0到20之间的整数。

我该怎么办?

我还尝试了另一种引擎:

#include <iostream>
#include <boost/random/uniform_real_distribution.hpp>
#include <boost/random/lagged_fibonacci.hpp>
boost::random::lagged_fibonacci607 eng = boost::random::lagged_fibonacci607();
boost::random::uniform_real_distribution<double> urd =
   boost::random::uniform_real_distribution<double>(0,20);
for (int i = 0; i <= 100; i++)
   std::cout << urd(eng) << std::endl;

但是什么都没有。。。(总是整数值)

在输出之前设置精度如何?std::cout.precision(15);

或者使用:

std::cout.precision(std::numeric_limits<double>::digits10);

示例

#include <iostream>
#include <limits>
#include <boost/random/uniform_real_distribution.hpp>
#include <boost/random/mersenne_twister.hpp>
int main()
{
    boost::random::mt19937 eng = boost::random::mt19937();
    boost::random::uniform_real_distribution<double> urd =
    boost::random::uniform_real_distribution<double>(0,20);
    std::cout.precision(std::numeric_limits<double>::digits10);
    for (int i = 0; i <= 100; i++)
    {
       std::cout << urd(eng) << std::endl;
    }
}

std::cout的默认精度设置为6,因此它应该在不设置此值的情况下工作,但。。。