--- ./boost/random/uniform_real_distribution.hpp 2016-12-22 15:33:19.000000000 +0300 +++ /usr/include/boost/random/uniform_real_distribution.hpp 2017-01-22 10:35:07.869379100 +0300 @@ -55,7 +55,7 @@ typedef T result_type; typedef typename Engine::result_type base_result; result_type numerator = static_cast(subtract()(eng(), (eng.min)())); - result_type divisor = static_cast(subtract()((eng.max)(), (eng.min)())) + 1; + result_type divisor = result_type(static_cast(subtract()((eng.max)(), (eng.min)())) + 1); BOOST_ASSERT(divisor > 0); BOOST_ASSERT(numerator >= 0 && numerator <= divisor); T result = numerator / divisor * (max_value - min_value) + min_value; @@ -67,7 +67,7 @@ inline T generate_uniform_real(Engine& eng, T min_value, T max_value) { if(max_value / 2 - min_value / 2 > (std::numeric_limits::max)() / 2) - return 2 * generate_uniform_real(eng, T(min_value / 2), T(max_value / 2)); + return T(2 * generate_uniform_real(eng, T(min_value / 2), T(max_value / 2))); typedef typename Engine::result_type base_result; return generate_uniform_real(eng, min_value, max_value, boost::is_integral());