--- jsr166/src/main/java/util/SplittableRandom.java 2013/07/10 15:40:19 1.1 +++ jsr166/src/main/java/util/SplittableRandom.java 2013/07/11 13:40:42 1.4 @@ -40,7 +40,7 @@ import java.util.stream.DoubleStream; * A generator of uniform pseudorandom values applicable for use in * (among other contexts) isolated parallel computations that may * generate subtasks. Class SplittableRandom supports methods for - * producing pseudorandom nunmbers of type {@code int}, {@code long}, + * producing pseudorandom numbers of type {@code int}, {@code long}, * and {@code double} with similar usages as for class * {@link java.util.Random} but differs in the following ways: * * @author Guy Steele + * @author Doug Lea * @since 1.8 */ public class SplittableRandom { @@ -112,7 +113,7 @@ public class SplittableRandom { * The value of gamma differs for each instance across a series of * splits, and is generated using a slightly stripped-down variant * of the same algorithm, but operating across calls to split(), - * not calls to nextLong(): Each instance carries the state of + * not calls to nextSeed(): Each instance carries the state of * this generator as nextSplit, and uses mix64(nextSplit) as its * own gamma value. Computations of gammas themselves use a fixed * constant as the second argument to the addGammaModGeorge @@ -310,12 +311,16 @@ public class SplittableRandom { * evenly divisible by the range. The loop rejects candidates * computed from otherwise over-represented values. The * expected number of iterations under an ideal generator - * varies from 1 to 2, depending on the bound. + * varies from 1 to 2, depending on the bound. The loop itself + * takes an unlovable form. Because the first candidate is + * already available, we need a break-in-the-middle + * construction, which is concisely but cryptically performed + * within the while-condition of a body-less for loop. * * 4. Otherwise, the range cannot be represented as a positive - * long. Repeatedly generate unbounded longs until obtaining - * a candidate meeting constraints (with an expected number of - * iterations of less than two). + * long. The loop repeatedly generates unbounded longs until + * obtaining a candidate meeting constraints (with an expected + * number of iterations of less than two). */ long r = mix64(nextSeed()); @@ -752,7 +757,8 @@ public class SplittableRandom { /** * Returns a stream with the given {@code streamSize} number of - * pseudorandom {@code double} values. + * pseudorandom {@code double} values, each between {@code 0.0} + * (inclusive) and {@code 1.0} (exclusive). * * @param streamSize the number of values to generate * @return a stream of {@code double} values @@ -770,7 +776,8 @@ public class SplittableRandom { /** * Returns an effectively unlimited stream of pseudorandom {@code - * double} values. + * double} values, each between {@code 0.0} (inclusive) and {@code + * 1.0} (exclusive). * * @implNote This method is implemented to be equivalent to {@code * doubles(Long.MAX_VALUE)}. @@ -866,8 +873,7 @@ public class SplittableRandom { public int characteristics() { return (Spliterator.SIZED | Spliterator.SUBSIZED | - Spliterator.ORDERED | Spliterator.NONNULL | - Spliterator.IMMUTABLE); + Spliterator.NONNULL | Spliterator.IMMUTABLE); } public boolean tryAdvance(IntConsumer consumer) { @@ -921,8 +927,7 @@ public class SplittableRandom { public int characteristics() { return (Spliterator.SIZED | Spliterator.SUBSIZED | - Spliterator.ORDERED | Spliterator.NONNULL | - Spliterator.IMMUTABLE); + Spliterator.NONNULL | Spliterator.IMMUTABLE); } public boolean tryAdvance(LongConsumer consumer) { @@ -977,8 +982,7 @@ public class SplittableRandom { public int characteristics() { return (Spliterator.SIZED | Spliterator.SUBSIZED | - Spliterator.ORDERED | Spliterator.NONNULL | - Spliterator.IMMUTABLE); + Spliterator.NONNULL | Spliterator.IMMUTABLE); } public boolean tryAdvance(DoubleConsumer consumer) {