Closed tibordp closed 11 months ago
Reproduced: new
panics in debug builds but succeeds in release builds.
The standard way to check for overflow would be using checked_add
, unfortunately we can't here: we're using generics over X: SampleUniform + PartialOrd + for<'a> ::core::ops::AddAssign<&'a X> + Clone + Default
.
Alternative approach: check that the sum is not less than either operand. This fails in debug builds with a panic instead of an Err(..)
. I don't like the idea of deliberately introducing deviations between debug and release behaviour, even if it's only different failure modes.
We can't circumvent this with wrapping_add
either.
We could use separate impls of new
for integer types vs float types, however:
So I'm not sure how to solve this!
WeightedIndex
distribution does not explicitely check that the sum of weights fits into the target typeX
(if it is an integer). When compiling in release mode (with overflow checking disabled), this code will almost always print 0 rather than the expected 1.I would expect
WeightedIndex::new
to either return anErr
or panic if the sum of weights does not fit intoX
.