Получение целых случайных значений вместо реальных с использованием библиотеки 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;
Но ничего... (всегда целочисленные значения)
1 ответ
Решение
Как насчет установки точности перед выводом? 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
, так что должно работать без установки этого, но...