id summary reporter owner description type status milestone component version severity resolution keywords cc 7020 uniform_01 improvement agribov_no_s_p_a_m@… No-Maintainer "The current code to simulate uniform random number in interval [0;1] contains verification to skip 1. if (result < result_type(1)) return result; It means that random generator can generate 0 but not 1. This is used in some other code, for example, generate Exponential random number: return -result_type(1) / _lambda * log(result_type(1)-uniform_01()(eng)); Meaning (1 - random number) will never be 0. If eng() returns integer number, then, with some limitations for result_type and generated range of random numbers (result_type has to be double for generated 32 bit random numbers): result_type factor = result_type(1) / (result_type((eng.max)()-(eng.min)()) + result_type(1)); return (result_type(eng() - (eng.min)()) + result_type(0.5)) * factor; In this case, the result will never contain 0 or 1 and will be unbiased. No more checking for 0 or 1 is necessary. " Bugs closed To Be Determined random Boost 1.49.0 Optimization invalid uniform_01