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 D Herbert (JIRA)" <ji...@apache.org> on 2019/06/11 22:36:00 UTC
[jira] [Resolved] (RNG-98) LongJumpableUniformRandomProvider
[ https://issues.apache.org/jira/browse/RNG-98?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alex D Herbert resolved RNG-98.
-------------------------------
Resolution: Implemented
In master.
> LongJumpableUniformRandomProvider
> ---------------------------------
>
> Key: RNG-98
> URL: https://issues.apache.org/jira/browse/RNG-98
> Project: Commons RNG
> Issue Type: New Feature
> Components: client-api, core
> Affects Versions: 1.3
> Reporter: Alex D Herbert
> Assignee: Alex D Herbert
> Priority: Major
> Fix For: 1.3
>
> Time Spent: 50m
> Remaining Estimate: 0h
>
> The {{JumpableUniformRandomProvider}} allows the state of a generator to be advanced in a large jump of *{{n}}* steps to allow a series of generators to be created at regularly spaced intervals. These can be used in parallel computations without overlap for at least *{{n}}* outputs of the generator.
> Extend the interface to allow a larger jump:
> {code:java}
> /**
> * Applies to generators that can be advanced a very large number of
> * steps of the output sequence in a single operation.
> */
> public interface LongJumpableUniformRandomProvider
> extends JumpableUniformRandomProvider {
> /**
> * Creates a copy of the UniformRandomProvider and advances the
> * state of the copy. The state of the current instance is not altered.
> * The state of the copy will be advanced an equivalent of {@code m}
> * sequential calls to a method that updates the state of the provider.
> *
> * <p>Note: The output will not overlap with {@code m / n} sequentially
> * created instances of the {@link #jump()} method where {@code n} is the
> * jump length of the {@link #jump()} method.</p>
> *
> * @return the copy with an advanced state
> */
> LongJumpableUniformRandomProvider longJump();
> }
> {code}
> This interface is to support a tiered parallel computation. The top tier is created using long jumps. Each top tier generator can create a large number of generators using the jump method.
> A suggestion for how to document an implementation is:
> {code:java}
> public class LongJumpableRNG implements LongJumpableUniformRandomProvider {
> /**
> * {@inheritDoc}
> *
> * <p>The jump size {@code m} is the equivalent of <pre>2<sup>64</sup></pre>
> * calls to {@link UniformRandomProvider#nextLong() nextLong()}. The output
> * will not overlap with <pre>2<sup>32</sup></pre> sequentially created
> * instances of the {@link #jump()} method.</p>
> */
> @Override
> public LongJumpableUniformRandomProvider longJump() {
> return ...;
> }
> // etc.
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)