I've got a line:
std::uniform_real_distribution<T> distribution(std::numeric_limits<T>::lowest(),
std::numeric_limits<T>::max());
It compiles but crashes on Debug(VS 2017CE). My guess is that, according to documentation of std::uniform_real_distribution:
Requires that
a ≤ bandb-a ≤ std::numeric_limits<RealType>::max()
when my b is ::max() and a is ::lowest(), condition:
b-a ≤ std::numeric_limits<RealType>::max()
is not fulfilled as b-a basically doubles the value of max. Is there any work around for this so that I will keep such a wide numbers range? ::min() works perfectly but omits negative values. Problem occurs for floating numbers only.
One simple solution, at least for the common IEEE-754 floating point numbers, would be randomly flipping the sign of a random non-negative number:
std::uniform_real_distribution<T> distribution(0.,
std::numeric_limits<T>::max());
auto rn = distribution(eng);
return someRandomFlag ? rn : -rn;
where someRandomFlag is chosen uniformly from {true, false}.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With