Skip to content

randomR overflow

When given a large range, randomR overflows at Double etc.

randomIvalDouble has two problems: first, the calculation of the center, (l+h)/2 overflows if the range is located near ±Infinity; second, and that concerns also randomRFloating, the scaling factor (h-l) overflows if the range is large enough.

Both problems can be fixed "well enough" by multiplying the bounds by 0.5 before the calculations and scaling up at the end,

0.5*l + 0.5*h instead of (l+h)/2
(0.5*h - 0.5*l)/(0.5*realToFrac int32Count) in randomIvalDouble
2.0*(0.5*l + coef*(0.5*h - 0.5*l)) in randomRFloating

These transformations can introduce a small error when a subnormal number is involved, but I think we can ignore that (no sane person would have a [nonzero] subnormal number as a bound, and a correct-for-all-cases transformation would be somewhat convoluted).

Trac metadata
Trac field Value
Version 7.2.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries/random
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information