c++boostboost-random

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


I am trying to get real random values using boost::random libraries. This is my code:

#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;

But I get integer numbers between 0 and 20.

How can I do?

I also tried another engine:

#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;

But nothing... (always integer values)


Solution

  • How about setting the precision before you output? std::cout.precision(15);?

    Or use:

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

    Example

    #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;
        }
    }
    

    The default precision for std::cout is set at 6, so it should work without setting this, but...