我正在尝试使用 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/