id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,testcase,blockedby,blocking,related,differential
5501,randomR overflow,daniel.is.fischer,rrnewton,"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).
",bug,closed,normal,,libraries/random,7.2.1,fixed,,,Unknown/Multiple,Unknown/Multiple,Incorrect result at runtime,,,,,