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

标签 c++ boost boost-random

我正在尝试使用 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,因此无需设置即可工作,但是...

关于c++ - 使用 boost::random 库获取整数随机值而不是实际值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404693/

相关文章:

c++ - 调试断言失败!表达式: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

c++ - 无法使 boost::asio 简单同步服务器教程程序正常工作——连接被拒绝

c++ - 启动 Mersenne twister PRNG

c++ - 使用模板 boost 随机性

c++ - 移动数组 C++ 中的元素

c++ - 明确指定的模板参数包

c++ - 没有用于调用的匹配函数...继承的 C++ 类中缺少重载

c++ - 是否有用于具有最大大小的可变长度数组的标准 C++ 模板类以实现良好的缓存位置?

c++ - boost optional 承认继承?