375 |
|
* may, and typically does, vary across program invocations. |
376 |
|
*/ |
377 |
|
public SplittableRandom() { // emulate defaultGen.split() |
378 |
< |
long s = defaultGen.getAndAdd(2 * GOLDEN_GAMMA); |
378 |
> |
long s = defaultGen.getAndAdd(GOLDEN_GAMMA << 1); |
379 |
|
this.seed = mix64(s); |
380 |
|
this.gamma = mixGamma(s + GOLDEN_GAMMA); |
381 |
|
} |
399 |
|
} |
400 |
|
|
401 |
|
/** |
402 |
+ |
* Fills a user-supplied byte array with generated pseudorandom bytes. |
403 |
+ |
* |
404 |
+ |
* @param bytes the byte array to fill with pseudorandom bytes |
405 |
+ |
* @throws NullPointerException if bytes is null |
406 |
+ |
* @since 10 |
407 |
+ |
*/ |
408 |
+ |
public void nextBytes(byte[] bytes) { |
409 |
+ |
int i = 0; |
410 |
+ |
int len = bytes.length; |
411 |
+ |
for (int words = len >> 3; words--> 0; ) { |
412 |
+ |
long rnd = nextLong(); |
413 |
+ |
for (int n = 8; n--> 0; rnd >>>= Byte.SIZE) |
414 |
+ |
bytes[i++] = (byte)rnd; |
415 |
+ |
} |
416 |
+ |
if (i < len) |
417 |
+ |
for (long rnd = nextLong(); i < len; rnd >>>= Byte.SIZE) |
418 |
+ |
bytes[i++] = (byte)rnd; |
419 |
+ |
} |
420 |
+ |
|
421 |
+ |
/** |
422 |
|
* Returns a pseudorandom {@code int} value. |
423 |
|
* |
424 |
|
* @return a pseudorandom {@code int} value |
551 |
|
} |
552 |
|
|
553 |
|
/** |
554 |
+ |
* Generates a pseudorandom number with the indicated number of |
555 |
+ |
* low-order bits. Because this class has no subclasses, this |
556 |
+ |
* method cannot be invoked or overridden. |
557 |
+ |
* |
558 |
+ |
* @param bits random bits |
559 |
+ |
* @return the next pseudorandom value from this random number |
560 |
+ |
* generator's sequence |
561 |
+ |
*/ |
562 |
+ |
protected int next(int bits) { |
563 |
+ |
return nextInt() >>> (32 - bits); |
564 |
+ |
} |
565 |
+ |
|
566 |
+ |
/** |
567 |
|
* Returns a pseudorandom {@code double} value between the specified |
568 |
|
* origin (inclusive) and bound (exclusive). |
569 |
|
* |
812 |
|
* @return a stream of pseudorandom {@code double} values, |
813 |
|
* each with the given origin (inclusive) and bound (exclusive) |
814 |
|
* @throws IllegalArgumentException if {@code streamSize} is |
815 |
< |
* less than zero |
783 |
< |
* @throws IllegalArgumentException if {@code randomNumberOrigin} |
815 |
> |
* less than zero, or {@code randomNumberOrigin} |
816 |
|
* is greater than or equal to {@code randomNumberBound} |
817 |
|
*/ |
818 |
|
public DoubleStream doubles(long streamSize, double randomNumberOrigin, |