[ 
https://issues.apache.org/jira/browse/RNG-190?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Herbert updated RNG-190:
-----------------------------
    Summary: ContinuousUniformSampler to specialize generation of the open 
interval (0, 1)  (was: ContinuousUniformSample to specialize generation of the 
open interval (0, 1))

> ContinuousUniformSampler to specialize generation of the open interval (0, 1)
> -----------------------------------------------------------------------------
>
>                 Key: RNG-190
>                 URL: https://issues.apache.org/jira/browse/RNG-190
>             Project: Commons RNG
>          Issue Type: Improvement
>          Components: sampling
>    Affects Versions: 1.6
>            Reporter: Alex Herbert
>            Priority: Minor
>
> The ContinuousUniformSampler can generate double values in the open interval 
> (lo, hi) using a constructor flag:
> {code:java}
> UniformRandomProvider rng = ...
> double lo = ...
> double hi = ...
> boolean excludeBounds = true;
> double x = ContinuousUniformSampler.of(rng, lo, hi, excludeBounds)
>                                    .sample();
> {code}
> The bounds are excluded using a rejection algorithm. This is used as rounding 
> during floating-point operations to map the underlying double value in [0, 1) 
> to (lo, hi) can generate values at the bounds.
> In the case where the interval is (0, 1) then it is possible to generate the 
> random value with a branchless operation that is more performant. Examples 
> are setting the lowest 1-bit using various methods:
> {code:java}
> // Using bits to double
> Double.longBitsToDouble(
>    (source.nextLong() >>> 12) | 0x3ff0000000000001L) - 1.0;
> // Using float addition to force a lowest 1-bit
> ((source.nextLong() >>> 12) + 0.5) * 0x1.0p-52d
> // Adding a bit before conversion to float
> ((source.nextLong() >>> 11) | 1) * 0x1.0p-53d
> {code}
> Note that the output would be limited to 2^52 evenly spaced rationals in (0, 
> 1). Rejection algorithms would output 2^53 - 1 rationals. In practice this 
> difference would not be noticeable.
> Provision of a guarantee of a fast non-zero double would be a benefit to 
> certain applications such as an inverse probability distribution defined on 
> the open interval.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to