You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Alex Herbert (Jira)" <ji...@apache.org> on 2026/02/10 12:53:00 UTC

[jira] [Commented] (RNG-189) Add interface ArbitrarilyJumpableGenerator

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

Alex Herbert commented on RNG-189:
----------------------------------

This interface can be supported by the counter based Philox RNGs (see [RNG 188]).

> Add interface ArbitrarilyJumpableGenerator
> ------------------------------------------
>
>                 Key: RNG-189
>                 URL: https://issues.apache.org/jira/browse/RNG-189
>             Project: Commons RNG
>          Issue Type: New Feature
>          Components: client-api
>            Reporter: Alex Herbert
>            Priority: Minor
>
> Add an interface to allow a generator to jump an arbitrary distance in its output period.
> This would be the equivalent of the interface from JDK 17+ {{java.util.random}} package:
> [RandomGenerator.ArbitrarilyJumpableGenerator (Javadoc JDK 25)|https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/random/RandomGenerator.ArbitrarilyJumpableGenerator.html]
> The jump distance in that interface is specified as a double to avoid the use of BigInteger for large jump distances. The JDK interfaces specify copy, jump and copyAndJump. However Commons RNG does not support easy copying of a generator to avoid common pitfalls of outputting the same sequence in multiple threads via a copy.
> The simplest API would be similar to the Commons RNG Jumpable interface with the addition of a distance argument:
> {code:java}
> public interface ArbitrarilyJumpableUniformRandomProvider extends UniformRandomProvider {
>     ArbitrarilyJumpableUniformRandomProvider jump(double distance);
>     default Stream<UniformRandomProvider> jumps(double distance) {
>         // ...
>     }
>     default Stream<UniformRandomProvider> jumps(long streamSize, double distance) {
>         // ...
>     }
> }
> {code}
> Note that the return value of a generator from the jump method makes this interface incompatible with the JDK's which returns void. However the existing Commons RNG jumping interfaces, which predate the JDK 17 release, are also incompatible. Any future update with minimum Java 17 support will have to address compatibility.



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