[ 
https://issues.apache.org/jira/browse/RNG-140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17362965#comment-17362965
 ] 

Alex Herbert commented on RNG-140:
----------------------------------

It could. But for the {{int}} case we have a sampler in the sampling package 
that does the equivalent algorithm:
{code:java}
DiscreteSampler sampler = DiscreteUniformSampler.of(rng, lower, upper);
{code}
Pending an eventual update to Java 8 it would make more sense to have a sampler 
interface that returns a long so we can move to support double, int or long 
streams with the sampler as a supplier. Perhaps DiscreteLongSampler or just 
LongSampler?
 * ContinuousSampler (double)
 * DiscreteSampler (int)
 * DiscreteLongSampler (long)
 * LongSampler (long)

Since the interfaces are functional interfaces (1 method) it would be cleaner 
(in Java 8) to have the samplers just implement:
 * DoubleSupplier.getAsDouble
 * IntSupplier.getAsInt
 * LongSupplier.getAsLong

The methods names are not as nice as the current {{sample}}. And we would have 
to add the SharedStateSampler support to this:
 * SharedStateDoubleSupplier
 * SharedStateIntSupplier
 * SharedStateLongSupplier

So maybe:
 * LongSampler
 * SharedStateLongSampler

Then add an additional method to the current DiscreteUniformSampler with long 
instead of int arguments:
{code:java}
int lower = ...
int upper = ...
SharedStateDiscreteSampler sampler1 = DiscreteUniformSampler.of(rng, lower, 
upper);
SharedStateLongSampler sampler2 = DiscreteUniformSampler.of(rng, (long) lower, 
(long) upper);
{code}
Note that the factory method returns the interface type. It was mentioned that 
a fluent API would return an instance of the class. If this is to be used in 
the future (RNG 2.0) then the factory method should be in its own class. A 
future API would be to replace ContinuousSampler and DiscreteSampler and with 
the more specific DoubleSampler and IntSampler:
{code:java}
DoubleSampler s1 = UniformDoubleSampler.of(rng, 3.12, 4.23);
IntSampler s2 = UniformIntSampler.of(rng, 32, 45);
LongSampler s3 = UniformLongSampler.of(rng, 100000000000032L, 100000000000045L);
{code}
This cannot be done currently as factory methods are tied to returning 
instances of the interface SharedState(Continuous|Discrete)Sampler. So those 
interfaces must continue until a major release.

For now I suggest adding:
 * LongSampler (interface)
 * SharedStateLongSampler (interface)
 * UniformLongSampler (sampler that implements the algorithm)

 

> nextLong(long lo, long hi)
> --------------------------
>
>                 Key: RNG-140
>                 URL: https://issues.apache.org/jira/browse/RNG-140
>             Project: Commons RNG
>          Issue Type: Wish
>          Components: sampling
>            Reporter: Gilles Sadowski
>            Priority: Minor
>              Labels: api
>
> Replacement for functionality defined in 
> [{{RandomUtils}}|https://gitbox.apache.org/repos/asf?p=commons-math.git;a=blob;f=commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/random/RandomUtils.java;h=60060e71d5bbe1d00878a1f54f8bb1ff88b65f11;hb=HEAD#l293].



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to