On Wed, 31 May 2023 11:57:19 GMT, Raffaello Giulietti <rgiulie...@openjdk.org> wrote:
>> The `default` method `nextDouble(double origin, double bound)` in >> `java.util.random.RandomGenerator` aims at generating a uniformly and >> spatially equidistributed random `double` in the left-closed and right-open >> range [`origin`, `bound`). It does so by applying the affine transform >> `origin + (bound - origin) * r` to a uniformly and spatially equidistributed >> random `double` `r` in the range [0, 1). >> >> Since floating-point arithmetic suffers from small but noticeable rounding >> errors, this ends up slightly deforming the distribution of `r` when >> applying the affine transform. > > Raffaello Giulietti has updated the pull request incrementally with one > additional commit since the last revision: > > Correction in comment. I read over the cited paper and the code in the PR. If this new method is sufficiently used, we could considering adding and equidoubles(double a, b) overload for the [a, b) case. src/java.base/share/classes/java/util/random/RandomGenerator.java line 398: > 396: * afforded by nextLong(). > 397: */ > 398: delta = nextUp(left) - left; The delta computations are equivalent to some expression phrased in terms of an ulp (Math.ulp) of a the endpoint or a value adjacent to the endpoint. If the ulp method is not used for the computation, I suggest adding a comment noting the equivalence. ------------- Marked as reviewed by darcy (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/12719#pullrequestreview-1534025771 PR Review Comment: https://git.openjdk.org/jdk/pull/12719#discussion_r1266129903