Получение целых случайных значений вместо реальных с использованием библиотеки 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, так что должно работать без установки этого, но...

Другие вопросы по тегам