Added François Panneton and Pierre L'Ecuyer WELL random generators:
WELL512a, WELL1024a, WELL19937a, WELL19937c, WELL44497a and WELL44497b git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@998744 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4eccb93251
commit
dbb5bb4968
|
@ -0,0 +1,334 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
/** This abstract class implements the WELL class of pseudo-random number generator
|
||||
* from François Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
|
||||
|
||||
* <p>This generator is described in a paper by François Panneton,
|
||||
* Pierre L'Ecuyer and Makoto Matsumoto <a
|
||||
* href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf">Improved
|
||||
* Long-Period Generators Based on Linear Recurrences Modulo 2</a> ACM
|
||||
* Transactions on Mathematical Software, 32, 1 (2006).</p>
|
||||
|
||||
* @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html">WELL Random number generator</a>
|
||||
* @version $Revision$ $Date$
|
||||
* @since 2.2
|
||||
|
||||
*/
|
||||
public abstract class AbstractWell extends BitsStreamGenerator implements Serializable {
|
||||
|
||||
/** Serializable version identifier. */
|
||||
private static final long serialVersionUID = -8068371019303673353L;
|
||||
|
||||
/** Number of bits blocks in the pool. */
|
||||
private final int r;
|
||||
|
||||
/** Bit mask preserving the first w - p bits in a w bits block. */
|
||||
private final int mp;
|
||||
|
||||
/** Bit mask preserving the last p bits in a w bits block. */
|
||||
private final int mpTilde;
|
||||
|
||||
/** First parameter of the algorithm. */
|
||||
private final int m1;
|
||||
|
||||
/** Second parameter of the algorithm. */
|
||||
private final int m2;
|
||||
|
||||
/** Third parameter of the algorithm. */
|
||||
private final int m3;
|
||||
|
||||
/** Current index in the bytes pool. */
|
||||
private int index;
|
||||
|
||||
/** Bytes pool. */
|
||||
private final int[] v;
|
||||
|
||||
/** Creates a new random number generator.
|
||||
* <p>The instance is initialized using the current time as the
|
||||
* seed.</p>
|
||||
* @param k number of bits in the pool (not necessarily a multiple of 32)
|
||||
* @param m1 first parameter of the algorithm
|
||||
* @param m2 second parameter of the algorithm
|
||||
* @param m3 third parameter of the algorithm
|
||||
*/
|
||||
protected AbstractWell(final int k, final int m1, final int m2, final int m3) {
|
||||
this(k, m1, m2, m3, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single int seed.
|
||||
* @param k number of bits in the pool (not necessarily a multiple of 32)
|
||||
* @param m1 first parameter of the algorithm
|
||||
* @param m2 second parameter of the algorithm
|
||||
* @param m3 third parameter of the algorithm
|
||||
* @param seed the initial seed (32 bits integer)
|
||||
*/
|
||||
protected AbstractWell(final int k, final int m1, final int m2, final int m3, final int seed) {
|
||||
this(k, m1, m2, m3, new int[] { seed });
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using an int array seed.
|
||||
* @param k number of bits in the pool (not necessarily a multiple of 32)
|
||||
* @param m1 first parameter of the algorithm
|
||||
* @param m2 second parameter of the algorithm
|
||||
* @param m3 third parameter of the algorithm
|
||||
* @param seed the initial seed (32 bits integers array), if null
|
||||
* the seed of the generator will be related to the current time
|
||||
*/
|
||||
protected AbstractWell(final int k, final int m1, final int m2, final int m3, final int[] seed) {
|
||||
|
||||
// the bits pool contains k bits, k = r w - p where r is the number
|
||||
// of w bits blocks, w is the block size (always 32 in the original paper)
|
||||
// and p is the number of unused bits in the last block
|
||||
final int w = 32;
|
||||
this.r = (k + w - 1) / w;
|
||||
final int p = r * w - k;
|
||||
|
||||
// set up generator parameters
|
||||
this.mp = (-1) << p;
|
||||
this.mpTilde = ~mp;
|
||||
this.m1 = m1;
|
||||
this.m2 = m2;
|
||||
this.m3 = m3;
|
||||
this.v = new int[r];
|
||||
this.index = 0;
|
||||
|
||||
// initialize the pool content
|
||||
setSeed(seed);
|
||||
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single long seed.
|
||||
* @param k number of bits in the pool (not necessarily a multiple of 32)
|
||||
* @param m1 first parameter of the algorithm
|
||||
* @param m2 second parameter of the algorithm
|
||||
* @param m3 third parameter of the algorithm
|
||||
* @param seed the initial seed (64 bits integer)
|
||||
*/
|
||||
protected AbstractWell(final int k, final int m1, final int m2, final int m3, final long seed) {
|
||||
this(k, m1, m2, m3, new int[] { (int) (seed >>> 32), (int) (seed & 0xffffffffl) });
|
||||
}
|
||||
|
||||
/** Reinitialize the generator as if just built with the given int seed.
|
||||
* <p>The state of the generator is exactly the same as a new
|
||||
* generator built with the same seed.</p>
|
||||
* @param seed the initial seed (32 bits integer)
|
||||
*/
|
||||
public void setSeed(final int seed) {
|
||||
setSeed(new int[] { seed });
|
||||
}
|
||||
|
||||
/** Reinitialize the generator as if just built with the given int array seed.
|
||||
* <p>The state of the generator is exactly the same as a new
|
||||
* generator built with the same seed.</p>
|
||||
* @param seed the initial seed (32 bits integers array), if null
|
||||
* the seed of the generator will be related to the current time
|
||||
*/
|
||||
public void setSeed(final int[] seed) {
|
||||
|
||||
if (seed == null) {
|
||||
setSeed(System.currentTimeMillis());
|
||||
return;
|
||||
}
|
||||
|
||||
System.arraycopy(seed, 0, v, 0, Math.min(seed.length, v.length));
|
||||
|
||||
if (seed.length < v.length) {
|
||||
for (int i = seed.length; i < v.length; ++i) {
|
||||
final long l = v[i - seed.length];
|
||||
v[i] = (int) ((1812433253l * (l ^ (l >> 30)) + i) & 0xffffffffL);
|
||||
}
|
||||
}
|
||||
|
||||
index = 0;
|
||||
|
||||
}
|
||||
|
||||
/** Reinitialize the generator as if just built with the given long seed.
|
||||
* <p>The state of the generator is exactly the same as a new
|
||||
* generator built with the same seed.</p>
|
||||
* @param seed the initial seed (64 bits integer)
|
||||
*/
|
||||
public void setSeed(final long seed) {
|
||||
setSeed(new int[] { (int) (seed >>> 32), (int) (seed & 0xffffffffl) });
|
||||
}
|
||||
|
||||
/** Generate next pseudorandom number.
|
||||
* <p>This method is the core generation algorithm. It is used by all the
|
||||
* public generation methods for the various primitive types {@link
|
||||
* #nextBoolean()}, {@link #nextBytes(byte[])}, {@link #nextDouble()},
|
||||
* {@link #nextFloat()}, {@link #nextGaussian()}, {@link #nextInt()},
|
||||
* {@link #next(int)} and {@link #nextLong()}.</p>
|
||||
* <p>This implementation is the general WELL algorithm, described in
|
||||
* a paper by François Panneton, Pierre L'Ecuyer and Makoto Matsumoto
|
||||
* <a href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf">Improved
|
||||
* Long-Period Generators Based on Linear Recurrences Modulo 2</a> ACM
|
||||
* Transactions on Mathematical Software, 32, 1 (2006).</p>
|
||||
* @param bits number of random bits to produce
|
||||
* @return random bits generated
|
||||
*/
|
||||
protected int next(final int bits) {
|
||||
|
||||
final int iRm1 = (index + r - 1) % r;
|
||||
final int iRm2 = (index + r - 2) % r;
|
||||
final int i1 = (index + m1) % r;
|
||||
final int i2 = (index + m2) % r;
|
||||
final int i3 = (index + m3) % r;
|
||||
|
||||
final int z0 = (mp & v[iRm1]) ^ (mpTilde & v[iRm2]);
|
||||
final int z1 = t0(v[index]) ^ t1(v[i1]);
|
||||
final int z2 = t2(v[i2]) ^ t3(v[i3]);
|
||||
final int z3 = z1 ^ z2;
|
||||
final int z4 = t4(z0) ^ t5(z1) ^ t6(z2) ^ t7(z3);
|
||||
|
||||
v[index] = z3;
|
||||
v[iRm1] = z4;
|
||||
v[iRm2] &= mp;
|
||||
index = iRm1;
|
||||
|
||||
return z4 >>> (32 - bits);
|
||||
|
||||
}
|
||||
|
||||
/** Apply transform M<sub>0</sub> to a bits block.
|
||||
* @param x bits block to apply transform to
|
||||
* @return M<sub>0</sub>(x)
|
||||
*/
|
||||
protected int m0(final int x) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Apply transform M<sub>1</sub> to a bits block.
|
||||
* @param x bits block to apply transform to
|
||||
* @return M<sub>1</sub>(x)
|
||||
*/
|
||||
protected int m1(final int x) {
|
||||
return x;
|
||||
}
|
||||
|
||||
/** Apply transform M<sub>2</sub> to a bits block.
|
||||
* @param t parameter of the transform
|
||||
* @param x bits block to apply transform to
|
||||
* @return M<sub>2, t</sub>(x)
|
||||
*/
|
||||
protected int m2(final int t, final int x) {
|
||||
return (t >= 0) ? (x >>> t) : (x << -t);
|
||||
}
|
||||
|
||||
/** Apply transform M<sub>3</sub> to a bits block.
|
||||
* @param t parameter of the transform
|
||||
* @param x bits block to apply transform to
|
||||
* @return M<sub>3, t</sub>(x)
|
||||
*/
|
||||
protected int m3(final int t, final int x) {
|
||||
return x ^ ((t >= 0) ? (x >>> t) : (x << -t));
|
||||
}
|
||||
|
||||
/** Apply transform M<sub>4</sub> to a bits block.
|
||||
* @param a parameter of the transform
|
||||
* @param x bits block to apply transform to
|
||||
* @return M<sub>4, a</sub>(x)
|
||||
*/
|
||||
protected int m4(final int a, final int x) {
|
||||
final int shiftedX = x >>> 1;
|
||||
return ((x & 0x80000000) != 0) ? (shiftedX ^ a) : shiftedX;
|
||||
}
|
||||
|
||||
/** Apply transform M<sub>5</sub> to a bits block.
|
||||
* @param t first parameter of the transform
|
||||
* @param b second parameter of the transform
|
||||
* @param x bits block to apply transform to
|
||||
* @return M<sub>5, t, b</sub>(x)
|
||||
*/
|
||||
protected int m5(final int t, final int b, final int x) {
|
||||
// table I of the paper specifies that a left shift for positive t and
|
||||
// a right shift for negative t, however, reference implementation does
|
||||
// the opposite (and in fact this transform is used only by Well512a
|
||||
// with t = -28). Here, we follow the reference implementation with a
|
||||
// left shift for NEGATIVE t
|
||||
final int shiftedX = (t >= 0) ? (x >>> t) : (x << -t);
|
||||
return x ^ (shiftedX & b);
|
||||
}
|
||||
|
||||
/** Apply transform M<sub>6</sub> to a bits block.
|
||||
* @param q first parameter of the transform
|
||||
* @param dsMask second parameter of the transform as a bit mask
|
||||
* @param tMask third parameter of the transform as a bit mask
|
||||
* @param a fourth parameter of the transform
|
||||
* @param x bits block to apply transform to
|
||||
* @return M<sub>6, q, s, t, a</sub>(x)
|
||||
*/
|
||||
protected int m6(final int q, final int dsMask, final int tMask, final int a, final int x) {
|
||||
final int lShiftedX = x << q;
|
||||
final int rShiftedX = x >>> (32 - q);
|
||||
final int z = (lShiftedX ^ rShiftedX) & dsMask;
|
||||
return ((x & tMask) != 0) ? (z ^ a) : z;
|
||||
}
|
||||
|
||||
/** Apply transform T<sub>0</sub> to a bits block.
|
||||
* @param vi0 bits block to apply transform to
|
||||
* @return T<sub>0</sub> v<sub>i,0</sub>
|
||||
*/
|
||||
protected abstract int t0(int vi0);
|
||||
|
||||
/** Apply transform T<sub>1</sub> to a bits block.
|
||||
* @param vim1 bits block to apply transform to
|
||||
* @return T<sub>1</sub> v<sub>i,m1</sub>
|
||||
*/
|
||||
protected abstract int t1(int vim1);
|
||||
|
||||
/** Apply transform T<sub>2</sub> to a bits block.
|
||||
* @param vim2 bits block to apply transform to
|
||||
* @return T<sub>2</sub> v<sub>i,m2</sub>
|
||||
*/
|
||||
protected abstract int t2(int vim2);
|
||||
|
||||
/** Apply transform T<sub>3</sub> to a bits block.
|
||||
* @param vim3 bits block to apply transform to
|
||||
* @return T<sub>3</sub> v<sub>i,m3</sub>
|
||||
*/
|
||||
protected abstract int t3(int vim3);
|
||||
|
||||
/** Apply transform T<sub>4</sub> to a bits block.
|
||||
* @param z0 bits block to apply transform to
|
||||
* @return T<sub>4</sub> z<sub>0</sub>
|
||||
*/
|
||||
protected abstract int t4(int z0);
|
||||
|
||||
/** Apply transform T<sub>5</sub> to a bits block.
|
||||
* @param z1 bits block to apply transform to
|
||||
* @return T<sub>5</sub> z<sub>1</sub>
|
||||
*/
|
||||
protected abstract int t5(int z1);
|
||||
|
||||
/** Apply transform T<sub>6</sub> to a bits block.
|
||||
* @param z2 bits block to apply transform to
|
||||
* @return T<sub>6</sub> z<sub>2</sub>
|
||||
*/
|
||||
protected abstract int t6(int z2);
|
||||
|
||||
/** Apply transform T<sub>7</sub> to a bits block.
|
||||
* @param z3 bits block to apply transform to
|
||||
* @return T<sub>7</sub> z<sub>3</sub>
|
||||
*/
|
||||
protected abstract int t7(int z3);
|
||||
|
||||
}
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
|
||||
/** This class implements the WELL1024a pseudo-random number generator
|
||||
* from François Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
|
||||
|
||||
* <p>This generator is described in a paper by François Panneton,
|
||||
* Pierre L'Ecuyer and Makoto Matsumoto <a
|
||||
* href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf">Improved
|
||||
* Long-Period Generators Based on Linear Recurrences Modulo 2</a> ACM
|
||||
* Transactions on Mathematical Software, 32, 1 (2006).</p>
|
||||
|
||||
* @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html">WELL Random number generator</a>
|
||||
* @version $Revision$ $Date$
|
||||
* @since 2.2
|
||||
|
||||
*/
|
||||
public class Well1024a extends AbstractWell {
|
||||
|
||||
/** Serializable version identifier. */
|
||||
private static final long serialVersionUID = -5403981908127539981L;
|
||||
|
||||
/** Number of bits in the pool. */
|
||||
private static final int K = 1024;
|
||||
|
||||
/** First parameter of the algorithm. */
|
||||
private static final int M1 = 3;
|
||||
|
||||
/** Second parameter of the algorithm. */
|
||||
private static final int M2 = 24;
|
||||
|
||||
/** Third parameter of the algorithm. */
|
||||
private static final int M3 = 10;
|
||||
|
||||
/** Creates a new random number generator.
|
||||
* <p>The instance is initialized using the current time as the
|
||||
* seed.</p>
|
||||
*/
|
||||
public Well1024a() {
|
||||
super(K, M1, M2, M3);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single int seed.
|
||||
* @param seed the initial seed (32 bits integer)
|
||||
*/
|
||||
public Well1024a(int seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using an int array seed.
|
||||
* @param seed the initial seed (32 bits integers array), if null
|
||||
* the seed of the generator will be related to the current time
|
||||
*/
|
||||
public Well1024a(int[] seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single long seed.
|
||||
* @param seed the initial seed (64 bits integer)
|
||||
*/
|
||||
public Well1024a(long seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t0(final int vi0) {
|
||||
return m1(vi0);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t1(final int vim1) {
|
||||
return m3(8, vim1);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t2(final int vim2) {
|
||||
return m3(-19, vim2);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t3(final int vim3) {
|
||||
return m3(-14, vim3);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t4(final int z0) {
|
||||
return m3(-11, z0);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t5(final int z1) {
|
||||
return m3(-7, z1);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t6(final int z2) {
|
||||
return m3(-13, z2);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t7(final int z3) {
|
||||
return m0(z3);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
|
||||
/** This class implements the WELL19937a pseudo-random number generator
|
||||
* from François Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
|
||||
|
||||
* <p>This generator is described in a paper by François Panneton,
|
||||
* Pierre L'Ecuyer and Makoto Matsumoto <a
|
||||
* href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf">Improved
|
||||
* Long-Period Generators Based on Linear Recurrences Modulo 2</a> ACM
|
||||
* Transactions on Mathematical Software, 32, 1 (2006).</p>
|
||||
|
||||
* @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html">WELL Random number generator</a>
|
||||
* @version $Revision$ $Date$
|
||||
* @since 2.2
|
||||
|
||||
*/
|
||||
public class Well19937a extends AbstractWell {
|
||||
|
||||
/** Serializable version identifier. */
|
||||
private static final long serialVersionUID = -8052371714518610855L;
|
||||
|
||||
/** Number of bits in the pool. */
|
||||
private static final int K = 19937;
|
||||
|
||||
/** First parameter of the algorithm. */
|
||||
private static final int M1 = 70;
|
||||
|
||||
/** Second parameter of the algorithm. */
|
||||
private static final int M2 = 179;
|
||||
|
||||
/** Third parameter of the algorithm. */
|
||||
private static final int M3 = 449;
|
||||
|
||||
/** Creates a new random number generator.
|
||||
* <p>The instance is initialized using the current time as the
|
||||
* seed.</p>
|
||||
*/
|
||||
public Well19937a() {
|
||||
super(K, M1, M2, M3);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single int seed.
|
||||
* @param seed the initial seed (32 bits integer)
|
||||
*/
|
||||
public Well19937a(int seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using an int array seed.
|
||||
* @param seed the initial seed (32 bits integers array), if null
|
||||
* the seed of the generator will be related to the current time
|
||||
*/
|
||||
public Well19937a(int[] seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single long seed.
|
||||
* @param seed the initial seed (64 bits integer)
|
||||
*/
|
||||
public Well19937a(long seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t0(final int vi0) {
|
||||
return m3(-25, vi0);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t1(final int vim1) {
|
||||
return m3(27, vim1);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t2(final int vim2) {
|
||||
return m2(9, vim2);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t3(final int vim3) {
|
||||
return m3(1, vim3);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t4(final int z0) {
|
||||
return m1(z0);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t5(final int z1) {
|
||||
return m3(-9, z1);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t6(final int z2) {
|
||||
return m3(-21, z2);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t7(final int z3) {
|
||||
return m3(21, z3);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
|
||||
/** This class implements the WELL19937c pseudo-random number generator
|
||||
* from François Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
|
||||
|
||||
* <p>This generator is described in a paper by François Panneton,
|
||||
* Pierre L'Ecuyer and Makoto Matsumoto <a
|
||||
* href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf">Improved
|
||||
* Long-Period Generators Based on Linear Recurrences Modulo 2</a> ACM
|
||||
* Transactions on Mathematical Software, 32, 1 (2006).</p>
|
||||
|
||||
* @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html">WELL Random number generator</a>
|
||||
* @version $Revision$ $Date$
|
||||
* @since 2.2
|
||||
|
||||
*/
|
||||
public class Well19937c extends Well19937a {
|
||||
|
||||
/** Serializable version identifier. */
|
||||
private static final long serialVersionUID = -7203498180754925124L;
|
||||
|
||||
/** Creates a new random number generator.
|
||||
* <p>The instance is initialized using the current time as the
|
||||
* seed.</p>
|
||||
*/
|
||||
public Well19937c() {
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single int seed.
|
||||
* @param seed the initial seed (32 bits integer)
|
||||
*/
|
||||
public Well19937c(int seed) {
|
||||
super(seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using an int array seed.
|
||||
* @param seed the initial seed (32 bits integers array), if null
|
||||
* the seed of the generator will be related to the current time
|
||||
*/
|
||||
public Well19937c(int[] seed) {
|
||||
super(seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single long seed.
|
||||
* @param seed the initial seed (64 bits integer)
|
||||
*/
|
||||
public Well19937c(long seed) {
|
||||
super(seed);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int next(final int bits) {
|
||||
|
||||
// compute raw value given by WELL19937a generator
|
||||
// which is NOT maximally-equidistributed
|
||||
int z = super.next(32);
|
||||
|
||||
// add Matsumoto-Kurita tempering
|
||||
// to get a maximally-equidistributed generator
|
||||
z = z ^ ((z << 7) & 0xe46e1700);
|
||||
z = z ^ ((z << 15) & 0x9b868000);
|
||||
|
||||
return z >>> (32 - bits);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,124 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
|
||||
/** This class implements the WELL44497a pseudo-random number generator
|
||||
* from François Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
|
||||
|
||||
* <p>This generator is described in a paper by François Panneton,
|
||||
* Pierre L'Ecuyer and Makoto Matsumoto <a
|
||||
* href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf">Improved
|
||||
* Long-Period Generators Based on Linear Recurrences Modulo 2</a> ACM
|
||||
* Transactions on Mathematical Software, 32, 1 (2006).</p>
|
||||
|
||||
* @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html">WELL Random number generator</a>
|
||||
* @version $Revision$ $Date$
|
||||
* @since 2.2
|
||||
|
||||
*/
|
||||
public class Well44497a extends AbstractWell {
|
||||
|
||||
/** Serializable version identifier. */
|
||||
private static final long serialVersionUID = 5154222742730470272L;
|
||||
|
||||
/** Number of bits in the pool. */
|
||||
private static final int K = 44497;
|
||||
|
||||
/** First parameter of the algorithm. */
|
||||
private static final int M1 = 23;
|
||||
|
||||
/** Second parameter of the algorithm. */
|
||||
private static final int M2 = 481;
|
||||
|
||||
/** Third parameter of the algorithm. */
|
||||
private static final int M3 = 229;
|
||||
|
||||
/** Creates a new random number generator.
|
||||
* <p>The instance is initialized using the current time as the
|
||||
* seed.</p>
|
||||
*/
|
||||
public Well44497a() {
|
||||
super(K, M1, M2, M3);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single int seed.
|
||||
* @param seed the initial seed (32 bits integer)
|
||||
*/
|
||||
public Well44497a(int seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using an int array seed.
|
||||
* @param seed the initial seed (32 bits integers array), if null
|
||||
* the seed of the generator will be related to the current time
|
||||
*/
|
||||
public Well44497a(int[] seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single long seed.
|
||||
* @param seed the initial seed (64 bits integer)
|
||||
*/
|
||||
public Well44497a(long seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t0(final int vi0) {
|
||||
return m3(-24, vi0);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t1(final int vim1) {
|
||||
return m3(30, vim1);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t2(final int vim2) {
|
||||
return m3(-10, vim2);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t3(final int vim3) {
|
||||
return m2(-26, vim3);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t4(final int z0) {
|
||||
return m1(z0);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t5(final int z1) {
|
||||
return m3(20, z1);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t6(final int z2) {
|
||||
// table II of the paper specifies t6 to be m6(9, d14, t5, 0xb729fcec, z2)
|
||||
// however, the reference implementation uses m6(9, d26, t17, 0xb729fcec, z2).
|
||||
// Here, we follow the reference implementation
|
||||
return m6(9, (-1) ^ (0x1 << 26), 0x1 << 17, 0xb729fcec, z2);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t7(final int z3) {
|
||||
return m1(z3);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
|
||||
/** This class implements the WELL44497b pseudo-random number generator
|
||||
* from François Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
|
||||
|
||||
* <p>This generator is described in a paper by François Panneton,
|
||||
* Pierre L'Ecuyer and Makoto Matsumoto <a
|
||||
* href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf">Improved
|
||||
* Long-Period Generators Based on Linear Recurrences Modulo 2</a> ACM
|
||||
* Transactions on Mathematical Software, 32, 1 (2006).</p>
|
||||
|
||||
* @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html">WELL Random number generator</a>
|
||||
* @version $Revision$ $Date$
|
||||
* @since 2.2
|
||||
|
||||
*/
|
||||
public class Well44497b extends Well44497a {
|
||||
|
||||
/** Serializable version identifier. */
|
||||
private static final long serialVersionUID = 4032007538246675492L;
|
||||
|
||||
/** Creates a new random number generator.
|
||||
* <p>The instance is initialized using the current time as the
|
||||
* seed.</p>
|
||||
*/
|
||||
public Well44497b() {
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single int seed.
|
||||
* @param seed the initial seed (32 bits integer)
|
||||
*/
|
||||
public Well44497b(int seed) {
|
||||
super(seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using an int array seed.
|
||||
* @param seed the initial seed (32 bits integers array), if null
|
||||
* the seed of the generator will be related to the current time
|
||||
*/
|
||||
public Well44497b(int[] seed) {
|
||||
super(seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single long seed.
|
||||
* @param seed the initial seed (64 bits integer)
|
||||
*/
|
||||
public Well44497b(long seed) {
|
||||
super(seed);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int next(final int bits) {
|
||||
|
||||
// compute raw value given by WELL44497a generator
|
||||
// which is NOT maximally-equidistributed
|
||||
int z = super.next(32);
|
||||
|
||||
// add Matsumoto-Kurita tempering
|
||||
// to get a maximally-equidistributed generator
|
||||
z = z ^ ((z << 7) & 0x93dd1400);
|
||||
z = z ^ ((z << 15) & 0xfa118000);
|
||||
|
||||
return z >>> (32 - bits);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,124 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
|
||||
/** This class implements the WELL512a pseudo-random number generator
|
||||
* from François Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
|
||||
|
||||
* <p>This generator is described in a paper by François Panneton,
|
||||
* Pierre L'Ecuyer and Makoto Matsumoto <a
|
||||
* href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf">Improved
|
||||
* Long-Period Generators Based on Linear Recurrences Modulo 2</a> ACM
|
||||
* Transactions on Mathematical Software, 32, 1 (2006).</p>
|
||||
|
||||
* @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html">WELL Random number generator</a>
|
||||
* @version $Revision$ $Date$
|
||||
* @since 2.2
|
||||
|
||||
*/
|
||||
public class Well512a extends AbstractWell {
|
||||
|
||||
/** Serializable version identifier. */
|
||||
private static final long serialVersionUID = 8706771840051210473L;
|
||||
|
||||
/** Number of bits in the pool. */
|
||||
private static final int K = 512;
|
||||
|
||||
/** First parameter of the algorithm. */
|
||||
private static final int M1 = 13;
|
||||
|
||||
/** Second parameter of the algorithm. */
|
||||
private static final int M2 = 9;
|
||||
|
||||
/** Third parameter of the algorithm. */
|
||||
private static final int M3 = 5;
|
||||
|
||||
/** Creates a new random number generator.
|
||||
* <p>The instance is initialized using the current time as the
|
||||
* seed.</p>
|
||||
*/
|
||||
public Well512a() {
|
||||
super(K, M1, M2, M3);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single int seed.
|
||||
* @param seed the initial seed (32 bits integer)
|
||||
*/
|
||||
public Well512a(int seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using an int array seed.
|
||||
* @param seed the initial seed (32 bits integers array), if null
|
||||
* the seed of the generator will be related to the current time
|
||||
*/
|
||||
public Well512a(int[] seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** Creates a new random number generator using a single long seed.
|
||||
* @param seed the initial seed (64 bits integer)
|
||||
*/
|
||||
public Well512a(long seed) {
|
||||
super(K, M1, M2, M3, seed);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t0(final int vi0) {
|
||||
return m3(-16, vi0);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t1(final int vim1) {
|
||||
return m3(-15, vim1);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t2(final int vim2) {
|
||||
return m3(11, vim2);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t3(final int vim3) {
|
||||
return m0(vim3);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t4(final int z0) {
|
||||
return m3(-2, z0);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t5(final int z1) {
|
||||
return m3(-18, z1);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t6(final int z2) {
|
||||
// table II of the paper specifies t6 to be m3(-28, z2)
|
||||
// however, the reference implementation uses m2(-28, z2).
|
||||
// Here, we follow the reference implementation
|
||||
return m2(-28, z2);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
protected int t7(final int z3) {
|
||||
return m5(-5, 0xda442d24, z3);
|
||||
}
|
||||
|
||||
}
|
|
@ -71,6 +71,9 @@ The <action> type attribute can be add,update,fix,remove.
|
|||
</action>
|
||||
</release>
|
||||
<release version="2.2" date="TBD" description="TBD">
|
||||
<action dev="luc" type="add" >
|
||||
Added new random number generators from the Well Equidistributed Long-period Linear (WELL).
|
||||
</action>
|
||||
<action dev="psteitz" type="update" issue="MATH-409">
|
||||
Made intercept / no intercept configurable in multiple regression classes. By default, regression
|
||||
models are estimated with an intercept term. When the "noIntercept" property is set to
|
||||
|
|
|
@ -48,10 +48,12 @@
|
|||
pluggable. By default, the JDK-supplied PseudoRandom Number Generator
|
||||
(PRNG) is used, but alternative generators can be "plugged in" using an
|
||||
adaptor framework, which provides a generic facility for replacing
|
||||
<code>java.util.Random</code> with an alternative PRNG. Another very
|
||||
<code>java.util.Random</code> with an alternative PRNG. Other very
|
||||
good PRNG suitable for Monte-Carlo analysis (but <strong>not</strong>
|
||||
for cryptography) provided by the library is the Mersenne twister from
|
||||
Makoto Matsumoto and Takuji Nishimura
|
||||
for cryptography) provided by the library are the Mersenne twister from
|
||||
Makoto Matsumoto and Takuji Nishimura and the more recent WELL generators
|
||||
(Well Equidistributed Long-period Linear) from François Panneton, Pierre
|
||||
L'Ecuyer and Makoto Matsumoto.
|
||||
</p>
|
||||
<p>
|
||||
Sections 2.2-2.6 below show how to use the commons math API to generate
|
||||
|
|
|
@ -0,0 +1,200 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
import org.junit.Assert;
|
||||
|
||||
import org.apache.commons.math.stat.descriptive.SummaryStatistics;
|
||||
import org.apache.commons.math.util.FastMath;
|
||||
import org.junit.Test;
|
||||
|
||||
public class Well1024aTest {
|
||||
|
||||
@Test
|
||||
public void testGaussian() {
|
||||
Well1024a mt = new Well1024a(42853252100l);
|
||||
SummaryStatistics sample = new SummaryStatistics();
|
||||
for (int i = 0; i < 10000; ++i) {
|
||||
sample.addValue(mt.nextGaussian());
|
||||
}
|
||||
Assert.assertEquals(0.0, sample.getMean(), 0.004);
|
||||
Assert.assertEquals(1.0, sample.getStandardDeviation(), 0.003);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDouble() {
|
||||
Well1024a mt = new Well1024a(195357343514l);
|
||||
SummaryStatistics sample = new SummaryStatistics();
|
||||
for (int i = 0; i < 10000; ++i) {
|
||||
sample.addValue(mt.nextDouble());
|
||||
}
|
||||
Assert.assertEquals(0.5, sample.getMean(), 0.0006);
|
||||
Assert.assertEquals(1.0 / (2.0 * FastMath.sqrt(3.0)),
|
||||
sample.getStandardDeviation(),
|
||||
0.002);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFloat() {
|
||||
Well1024a mt = new Well1024a(4442733263l);
|
||||
SummaryStatistics sample = new SummaryStatistics();
|
||||
for (int i = 0; i < 10000; ++i) {
|
||||
sample.addValue(mt.nextFloat());
|
||||
}
|
||||
Assert.assertEquals(0.5, sample.getMean(), 0.0001);
|
||||
Assert.assertEquals(1.0 / (2.0 * FastMath.sqrt(3.0)),
|
||||
sample.getStandardDeviation(),
|
||||
0.003);
|
||||
}
|
||||
|
||||
@Test(expected=java.lang.IllegalArgumentException.class)
|
||||
public void testNextIntNeg() {
|
||||
new Well1024a(1).nextInt(-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNextIntN() {
|
||||
Well1024a mt = new Well1024a(0x12b8a7412bb25el);
|
||||
for (int n = 1; n < 20; ++n) {
|
||||
int[] count = new int[n];
|
||||
for (int k = 0; k < 10000; ++k) {
|
||||
int l = mt.nextInt(n);
|
||||
++count[l];
|
||||
Assert.assertTrue(l >= 0);
|
||||
Assert.assertTrue(l < n);
|
||||
}
|
||||
for (int i = 0; i < n; ++i) {
|
||||
Assert.assertTrue(n * count[i] > 8600);
|
||||
Assert.assertTrue(n * count[i] < 11200);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNextInt() {
|
||||
Well1024a mt = new Well1024a(new int[] { 1, 2, 3, 4, 5 });
|
||||
int walk = 0;
|
||||
for (int k = 0; k < 10000; ++k) {
|
||||
if (mt.nextInt() >= 0) {
|
||||
++walk;
|
||||
} else {
|
||||
--walk;
|
||||
}
|
||||
}
|
||||
Assert.assertTrue(FastMath.abs(walk) < 70);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNextLong() {
|
||||
Well1024a mt = new Well1024a(12345);
|
||||
int walk = 0;
|
||||
for (int k = 0; k < 10000; ++k) {
|
||||
if (mt.nextLong() >= 0) {
|
||||
++walk;
|
||||
} else {
|
||||
--walk;
|
||||
}
|
||||
}
|
||||
Assert.assertTrue(FastMath.abs(walk) < 70);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNexBoolean() {
|
||||
Well1024a mt = new Well1024a(76342);
|
||||
int walk = 0;
|
||||
for (int k = 0; k < 10000; ++k) {
|
||||
if (mt.nextBoolean()) {
|
||||
++walk;
|
||||
} else {
|
||||
--walk;
|
||||
}
|
||||
}
|
||||
Assert.assertTrue(FastMath.abs(walk) < 180);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNexBytes() {
|
||||
Well1024a mt = new Well1024a(0);
|
||||
int[] count = new int[256];
|
||||
byte[] bytes = new byte[10];
|
||||
for (int k = 0; k < 1000000; ++k) {
|
||||
mt.nextBytes(bytes);
|
||||
for (byte b : bytes) {
|
||||
++count[b + 128];
|
||||
}
|
||||
}
|
||||
int min = Integer.MAX_VALUE;
|
||||
int max = Integer.MIN_VALUE;
|
||||
for (int c : count) {
|
||||
min = FastMath.min(min, c);
|
||||
max = FastMath.max(max, c);
|
||||
}
|
||||
int expected = (1000000 * bytes.length) / count.length;
|
||||
Assert.assertTrue((expected - 600) < min);
|
||||
Assert.assertTrue(max < (expected + 600));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReferenceCode() {
|
||||
Well1024a mt = new Well1024a(new int[] {
|
||||
740849862, 1202665156, -199039369, -259008301, -291878969, -1164428990, -1565918811, 491009864,
|
||||
-1883086670, 1383450241, 1244617256, 689006653, -1576746370, -1307940314, 1421489086, 1742094000,
|
||||
-595495729, 1047766204, 1875773301, -1637793284, 1379017098, 262792705, 191880010, -251000180,
|
||||
-1753047622, -972355720, 90626881, 1644693418, 1503365577, 439653419, 1806361562, 1268823869
|
||||
});
|
||||
int[] refInt = {
|
||||
-1478749726, -1645579484, -2075363835, -2063444174, -1834148336, -1769045872, -40711346, 1717441026,
|
||||
2130656771, 783441285, 570433609, 1560023451, 653233971, 1368672434, -72036215, 1071111800,
|
||||
933776492, 26114960, 49888778, 1808107515, 1092989296, 754848337, 1336994364, -1987450448,
|
||||
-691190146, -1803870839, 1110716866, 1173269113, -391000050, 2014216908, 180756301, -382891013,
|
||||
-1908154585, 1580737629, 1080267957, -125532248, 2094530239, 2132964485, -438596348, -760299445,
|
||||
1058181869, 2050816800, -1534429037, -62552782, 824524142, -818590371, -1857695907, -684762866,
|
||||
-156556543, -902759995, -880795194, -1387351132, -1263017515, 448006597, 201038266, 1929826313,
|
||||
-455367306, 672963027, 2000073013, -1546842042, 446341090, 1001696686, -779919012, -347722602,
|
||||
-1342821677, 1639571150, -835315755, 1505585376, 367004975, -2035864404, -1786623553, 1249724913,
|
||||
182435312, 1444514513, 1815333708, 1333772382, 299664001, -284691169, 2034403374, 1423310887,
|
||||
-1319051884, 1557286441, -445198266, -251809030, 1602786123, 944036382, -1020529634, 258344235,
|
||||
685254367, 1838964943, -156674528, -979736602, -538312836, 234643178, 211152102, -635498640,
|
||||
-1036733933, -1347589147, -565609042, -1358714165, 508618483, -786364693, 2071450261, 1206956772,
|
||||
-678931458, 167690617, 144698821, 1719720781, 1575869280, -1343221123, -1766469944, 284991647,
|
||||
-717305514, 892653651, -1368347075, -615701972, -730369849, 1360396003, -1869287623, 1778269052,
|
||||
-586061545, -699517114, 61530249, -1860611767, -519660852, 1841085925, 1555610093, -399979337,
|
||||
-790345742, 422355947, 2007965433, 2044952550, -1712164595, -102915702, -693865324, -1894042487,
|
||||
-1285020072, -215883074, 95833252, 1625818040, -1055951680, 513067085, 1825246558, -553461652,
|
||||
-1923361799, -1869480206, 567232636, -1751727150, -1832301399, -108136455, -1312244126, 14006795,
|
||||
850221366, -382389732, -1741556188, -1317464467, 1948314870, 753994471, 1028235947, 342494132,
|
||||
-1862256693, 723808794, -234257642, 1609928369, -802733456, 1315831915, 1436072885, 1224767136,
|
||||
2144557791, -1839965886, 224821018, -1461697757, -1080386760, 1638573498, -1188173812, -325181523,
|
||||
-1750676219, -1780415850, 698793362, -908352052, 299746482, -161660934, 1938166833, 800297005,
|
||||
56640033, -1214932666, -1248124842, 1822796868, 1777615881, -718517774, 1908159957, 1733053281,
|
||||
1851844331, 1283519375, -1771494956, 2060179999, 1666129209, 1919453531, -498145770, 697567008,
|
||||
1855487148, -1587163491, 565216434, -1477877933, -925662919, -806492585, -1201439047, -1424534232,
|
||||
1788616523, 69414717, 655893636, -1175978556, 24787512, -861550001, 439525754, -190433174,
|
||||
-383811606, -508589783, 1441608687, 608181366, 1539467064, 925903122, 697209654, 1878283393,
|
||||
-1967567432, -1659677763, -249658183, 847096354, 397741956, -125334541, -1286840731, 1016461908,
|
||||
-997968592, 1795331475, 1856856501, -1716726445, -582181331, -887091847, 426964855, -609219941,
|
||||
-1456232632, -483467616, 1069260754, 972242064, -1406786247, 1954194029, 52627891, 1212755081,
|
||||
2117436668, 281073392, 741537353, -483063506, 1850906286, -244876135, -270818140, 1817568823
|
||||
};
|
||||
|
||||
for (int i = 0; i < refInt.length; ++i) {
|
||||
Assert.assertEquals(refInt[i], mt.nextInt());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class Well19937aTest {
|
||||
|
||||
@Test
|
||||
public void testReferenceCode() {
|
||||
int[] base = {
|
||||
740849862, 1202665156, -199039369, -259008301, -291878969, -1164428990, -1565918811, 491009864,
|
||||
-1883086670, 1383450241, 1244617256, 689006653, -1576746370, -1307940314, 1421489086, 1742094000,
|
||||
-595495729, 1047766204, 1875773301, -1637793284, 1379017098, 262792705, 191880010, -251000180,
|
||||
-1753047622, -972355720, 90626881, 1644693418, 1503365577, 439653419, 1806361562, 1268823869
|
||||
};
|
||||
int[] init = new int[624];
|
||||
for (int i = 0; i < init.length; ++i) {
|
||||
init[i] = base[i % base.length] + i;
|
||||
}
|
||||
Well19937a mt = new Well19937a(init);
|
||||
int[] refInt = {
|
||||
-612874471, -354976292, -1838197125, -1781560577, 278390997, 1214938280, -1752615390, -760835246, -1712883765, -241205782, -145390202, 495649160, -514388259, -1271015916, -1640000013, 849273623,
|
||||
-549729394, -1206917255, -545909692, 811925434, -1665729633, -1525292882, 1416246482, -153220826, 1148868872, -326143196, 1724979062, 1790931148, -1648679618, -439051683, 112482777, -1484051520,
|
||||
-1881272572, -1270447031, -1216102401, 1579107248, -1224395621, 2144411988, -416216641, -1529222361, 1628987080, 164445245, 1506928916, 928145916, 1436000427, 862025970, 560077705, -1887251027,
|
||||
-514360858, 1735094506, 475624879, 1755802355, 295448361, -155399225, 3972415, 1368201076, -465126094, -1622687259, -246099304, 1798631152, -1937269102, -1700560396, -293352622, -896632303,
|
||||
-2088933220, -194382452, -480218162, -1618517785, -1925031481, -150217434, 1678937261, 2130832364, -485546678, -1499224981, 1430390884, -1895417302, 210514746, 1781140999, -1940853105, -1238099647,
|
||||
485922557, -103223212, 633481679, -632946979, 695235541, -1661735272, 277603567, -958341538, 256982285, 1850270018, -327388076, -219053874, 1380560653, -1221689980, 1335863752, -545032383,
|
||||
-575291735, -1295623907, -140058298, 1063302709, -1290702617, -790401546, -170630961, -1203114473, 1458063108, -1212753301, 1546428514, 2112636413, -1463028928, -1812598032, -883529486, 1131084094,
|
||||
62042165, 2135819802, -1192342739, 98361522, -1341042205, -475283063, -1632033747, 1745196892, 168608689, -914987039, 274428907, -881357258, 167940012, -1975737532, -903960486, -1370984244,
|
||||
-589352935, 1783633514, -570111010, 71495377, 194463285, -1243905021, -1398490898, 221691209, -55728834, -638916786, -770622372, -1911651810, -295233027, 301467998, 2058638784, 681490183,
|
||||
-1547865078, -1668135684, 1299261826, 1649468635, 287995017, -2076844852, 1193468826, -853948258, 120082777, 1051829542, -1288514343, -159456430, 275748820, -480127107, -604943233, -2138088332,
|
||||
1202614819, 1427201263, -1906344469, -1230779533, 1690367192, 733159097, 794410312, -1114452505, -1601554413, 976747949, 1517787154, 2091780205, 1052078906, 1919282771, -191013374, 1805397142,
|
||||
736939268, -1056272823, -727464316, -659459005, 797803875, -1104633884, 1042342081, -24514837, 1919469940, 1903722546, -814157872, 1605407665, -262351256, -288949635, 729204844, -1132605534,
|
||||
745453338, 387915035, 1094173337, 2100279147, 156863702, -257377544, -719587984, -1496015613, 1908993744, 2016957554, 918749666, -135963651, -1356808639, -1711185741, 1472589240, -398100149,
|
||||
628791415, -1381837652, -1820702771, -593586943, -1456631279, -1837975351, -1394249972, -556916726, 833231177, 43449750, 1029237092, -2086437337, -459463076, -533031784, -1739648287, -1374722961,
|
||||
2024908394, 1389678488, 2018558, -1391707864, -795935743, 904816957, 836583280, 1766194531, -1374431014, -904437876, 2030248636, -265724199, 2056758426, -810499837, 887193593, -77811488,
|
||||
1496312336, -1874348275, -456193866, -2137130942, 868120387, 29025455, -1999867716, 2001322335, -579152815, -390892056, 1592011837, -306394879, 93636886, -190879994, 1923358153, 269052141,
|
||||
-396050253, -987531729, 480350991, 1276744541, -1445571957, -957571005, -2046270221, -1715395752, 1113585628, -1782113514, -697560146, 835320000, 1014320959, -2119834109, 460056841, -1464772991,
|
||||
-1282790418, -2120806165, 86176097, -731086307, 832497517, -1876684928, 541008240, 551124479, -450919132, 647860281, -2115397586, 979247589, 1095559204, 1927958688, 169497703, 1999579054,
|
||||
2019745038, 1656022059, -1109662138, 375237154, 1450814436, 919988416, 849761266, 1457057327, 1771166577, -1639880487, -852488298, 1767063646, 657295386, -585561879, 740792583, 1664558308,
|
||||
-654749506, 1109275990, 182597559, 1106789745, -1806628480, 25948116, 1748374299, 196057325, -164213209, 1687024594, 782029276, 1879737947, -1528219611, 412585737, 1190325629, 1985821911,
|
||||
-1272945202, -1238637137, 465818730, -1537670961, 1131953615, 905623579, 609183424, 1138422991, 1522974699, 589719061, -1310894604, 890952933, -885204790, -393535694, 1238408670, 1780660354,
|
||||
677803525, -1121509064, 1553148616, 1109165936, -1450120385, 1525252521, -1354897489, -595402189, -1274551767, -869281409, 1788815975, 2020262116, 1124100185, -400839020, 310574108, 1354413045,
|
||||
-1310514485, 1895732085, 626639054, 1667355357, 2065637178, -1889009143, -440157749, 1762849463, -1693853642, -56602956, -930874188, -398470740, 778356402, -2113156881, 42854964, 1844399604,
|
||||
-2098310302, -1812029757, 1441188713, 899579267, 1266994172, 1841370863, -660740252, -43254718, 1124500192, 1884907320, 879997211, 1775139845, -1360112721, 1630490057, 362567879, 1113475029,
|
||||
290319279, -1209506867, 398146039, -957742350, 1185761854, 1519676447, -912689915, -1117128973, -305563462, -1928033363, -1766324543, 1702753492, 1696951912, -1895072395, 932663591, -566548128,
|
||||
991675996, 56529814, 980735023, 718166662, -650028466, -886842051, 1857048587, -569023569, -1820572202, -851452711, -958700452, -621825633, -65649888, -510143183, 761267599, -1692108035,
|
||||
1729071710, 1623630864, -53498654, 267235687, 659201413, 1152882627, -824194574, 356636960, -502391121, -538453360, 66115376, -1633290370, -1522088932, 268949070, 684499443, -859474501,
|
||||
1586764345, -1515639709, 319695602, -307025150, 69076508, 1050726785, -1340930110, 552191600, -207852941, -273572993, -539580440, 710343120, 1957076127, -1107172811, -561518280, -1775022699,
|
||||
1978792904, 1935531451, -2084046304, -419742902, -737652926, 614022023, 1676952428, 769892939, -1092786807, -1117113223, -266029995, -350150999, 207738542, 1964896575, 48805284, 1736500159,
|
||||
551289617, -1847923501, 1856609505, 2007480480, -681860219, -1198106493, 1483591043, -523895316, -1814473078, -1521087404, -1348859926, 1298056897, 1813789478, 946683654, 79196400, 1766250931,
|
||||
472737685, 1764634332, -1844726079, -130619045, -508713868, -1762537125, 1010108863, 170107098, 1705386380, -1139681802, 183739097, 1662699401, 1842694501, 1714633805, 46208876, 616720693,
|
||||
-252553427, 1986302230, -103130254, 1943225981, 110746655, 553260552, 1588938073, -1934623163, -2144781332, -2086217416, 1941265852, -781953226, 1216234254, 605543697, -710872598, 2048636577,
|
||||
-1986927728, -1007017623, 1243051501, -614249563, -2128221291, 581579813, 1173464240, -1906830937, 261329601, -1805974103, 769823490, 1858731164, -561762071, 516417430, -1221329437, -825500715,
|
||||
1091364656, -993658663, -1475434188, -1070804384, -1876492082, 899494424, 683486936, 878807455, 56642807, -1268202879, 1379172046, -1386869373, -1158233876, 1759190552, 1597629789, 1411151497,
|
||||
-1254268471, 1075936979, -918778269, -2132675184, 953140888, 1906982077, 1154200766, -365384600, -1142488826, 708535121, -2134869964, -1531201665, -2100526761, 1268256467, 2071480803, 193135243,
|
||||
1374158182, 989505347, -933612202, -2134839213, -1302795271, -2092029041, 1812014826, 2090855917, 2005348528, 606434393, -60141386, 11156360, 539516285, -122485034, -893237911, -978127424,
|
||||
1509901816, -451029719, 428544700, -1622965963, -1993611605, -1989324583, 1104111587, -795138585, -899552401, -2110167769, -234502445, 1586963605, -503778455, 529261062, 325327284, -106186403,
|
||||
65369563, -1475700698, -228624261, 715975009, 1099352363, -1796883396, 1376542700, -308942420, -344940451, -395389249, -1562737166, 1869802677, 1273494710, 2075587668, -789570273, 1563347596,
|
||||
1142901755, 1676422422, -1729157809, -1399423717, -1814262429, -1809707284, 1393992342, -570246212, 1065528749, -781643849, 1218667301, -1097949471, 1305629790, 901301039, -704762030, 360582612,
|
||||
1411910672, 1848068741, -614500891, -146889637, -913903597, 723527277, -147033328, -199273155, 734997691, -2072735286, 2129258691, -1385074104, 931616624, 1065477319, -1543474555, -531410292,
|
||||
-2123119121, -1538464113, -1153585193, 1559931968, -654877011, 879865200, 1489681397, 1998864644, -1964160144, 163671782, -858364148, -323324233, 801208648, 705864113, 436184243, 643773864,
|
||||
2087594507, 134637265, -749956494, -1657343972, -1828172168, -27357303, -1145161336, -1192513644, 216148260, 611393153, -13752671, -358631090, -1211920749, 593572064, 657629904, -1445961088,
|
||||
-250704995, 1797542707, -2122311891, -316774825, -296303057, -868002056, -86697533, 2020588145, 1203427903, -1371839056, 669531557, -2031033836, 1323994690, 13703036, 785437772, -1465821554,
|
||||
-694756014, -2131068154, -1745448876, -1095891733, 936594025, -1119068454, 855423970, 1705079340, -905640608, 162297141, 1336619311, -344353769, -92608588, -1080573824, 2002293105, -2088030765,
|
||||
-1684198727, -129054718, -949437132, -127983221, -216664110, 1700146143, -711174649, 1500113839, 1212236226, -2017364219, -1263597675, 511929344, -323998524, -2021313185, 1803000924, 927670608,
|
||||
336267187, 1244256964, -1665390108, 991395134, -251232188, 1267445783, 1547951569, 740269916, 1776431169, 1687220659, 228229817, 271386089, -682906779, -438090344, 1190436796, -744272540,
|
||||
1879221151, 1145200306, -1730983338, -1119209309, 90826726, 1567861540, 1638852830, -1645384932, 1566909531, 1088584561, 1030555565, -1872052014, 720320695, -885053674, -321216789, 739907579,
|
||||
368580703, -443635520, 1232705619, -1355949988, -1047211249, -1571429448, 599299852, 1036970439, 1513838571, -51797291, -26647565, -1262878942, -916262582, 1579082269, -292007383, 1289013866,
|
||||
-1612184284, 1451738668, 448608569, 476432992, -1229609565, 786372409, 929928149, -150100614, 448155944, -1322320576, -856549627, 1057443268, -1536809554, 577508258, 584906122, 275295163,
|
||||
-604262071, -236043234, -1866434954, -2072447013, 646132876, 847562546, -310005953, -1104162658, 393261203, -730102354, 440824482, 1654535035, -1296359745, 1487359328, -977776604, -775827779,
|
||||
-1298695106, 519080622, 1697162240, 227873031, -371123123, 1273702312, -1710063656, -2138342344, 1139555478, 1531578907, -1498880699, 1183507362, 1875307493, -1649740413, 2135386504, -962458407,
|
||||
424161768, 504272962, 202204247, 1783466420, 2015579232, -676642965, 2067456450, 914480415, -620398841, 1880405399, 1406637142, 1951104977, 633496157, 224861869, -58659291, 994942775,
|
||||
-479000645, 1421449115, 100168104, 249754169, -1219011494, 1736303638, 364013694, -1750035055, -479217141, 1652913106, -2109452331, 1633842910, -1547663337, 936627493, -1152799743, 896955899,
|
||||
-1407742850, -523769014, 357161414, 872293304, 744895980, 720829676, -240843156, -111779524, 1292836315, -1792141538, 1946959925, 1181751089, -1120674052, 1185192575, -1387002557, 1973209255,
|
||||
-120887476, -766577735, -443913073, 786620227, 428564781, -101232106, -425959852, 198082021, 1173272226, -1744840378, -1621135606, -1539498583, -1101274572, 43399711, -1256764602, 1201920787,
|
||||
2049426139, 846545551, -2121520873, -1202939675, -470425740, 321987390, 1862019060, -951540342, -894238318, -430407175, -1662746491, 656574776, 1580373777, -431290218, 1645824323, -1953526979,
|
||||
-374682356, 474291752, 1071558425, 511038981, -760598678, -567797285, -1176476266, -268409005, -2130644484, -67970563, 1756046948, 1429860462, -1130984739, -124916495, -1544436836, -1863524031,
|
||||
1024916487, -1388636482, -1573205065, 892628956, 1831270021, 1176430590, 1158914682, -2006787098, -1228130033, 1516111488, -1499151347, 470546266, 1642603981, 1425140838, -1823071475, -1775267236,
|
||||
-1009380612, 164746986, 1129677098, 1842642579, -482342932, -507480364, 1656012309, 1981601761, -881042120, -511987083, 342447017, 381192578, 983008095, 741012865, -1877136350, -199211983,
|
||||
-452784912, 1929572576, -1678291139, -864375281, -1610561247, -1936356726, -749553767, -865893512, -567081879, -1303973729, -939636958, -622974563, 428284937, 1049237414, 852280765, 86648946,
|
||||
-1353851401, -1045422335, 898035731, -1636093996, -1083174191, 245046915, -359768226, -1028491655, 1051575118, 1774289451, 1839389415, -1594053468, 736707953, 1873556950, 401186168, -583669552,
|
||||
-88375334, 2002752071, 264506453, -1304812107, -759203942, -114958524, -1878903503, 841613720, 1910863820, -1738114003, 701455920, 1791058048, -1850960547, 1672292671, 1172188809, 604848896,
|
||||
-1607489375, 305370478, -948153885, -1971080100, -1848966954, -584538365, 39416319, -1689119162, 944942598, 1777111075, 1534005553, 2022718432, -25820385, 3077695, -315950520, 1859184648,
|
||||
-1397829266, -1666371809, 858913807, -610818620, 1554973298, 580023809, -1662988256, -408630026, 1316681876, 738204271, 942829881, -758486983, 780345857, 667165037, -2086803585, 789741324
|
||||
};
|
||||
|
||||
for (int i = 0; i < refInt.length; ++i) {
|
||||
Assert.assertEquals(refInt[i], mt.nextInt());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class Well19937cTest {
|
||||
|
||||
@Test
|
||||
public void testReferenceCode() {
|
||||
int[] base = {
|
||||
740849862, 1202665156, -199039369, -259008301, -291878969, -1164428990, -1565918811, 491009864,
|
||||
-1883086670, 1383450241, 1244617256, 689006653, -1576746370, -1307940314, 1421489086, 1742094000,
|
||||
-595495729, 1047766204, 1875773301, -1637793284, 1379017098, 262792705, 191880010, -251000180,
|
||||
-1753047622, -972355720, 90626881, 1644693418, 1503365577, 439653419, 1806361562, 1268823869
|
||||
};
|
||||
int[] init = new int[624];
|
||||
for (int i = 0; i < init.length; ++i) {
|
||||
init[i] = base[i % base.length] + i;
|
||||
}
|
||||
Well19937c mt = new Well19937c(init);
|
||||
int[] refInt = {
|
||||
2128528153, 327121884, 935445371, -83026433, -1041143083, 2084595880, -1073535198, -1678863790, -523636021, -1514837782, -736786810, 1527711112, -1051227939, 978703380, 410322163, 1727815703,
|
||||
-648426354, 636056441, 1954420292, 17754810, -958628705, -1091307602, 1793078738, -1680336346, 1792171272, 941973796, -2066152330, -1248758068, -1061211586, 262020189, 1276960217, -233886784,
|
||||
1767509252, -1811939255, -406116097, -742435920, -1349799525, 240329556, -332161345, 1488943143, -332244280, 2093328957, 674753300, -1930135556, 257111467, 63793650, -1964335223, 1315849133,
|
||||
-797349146, 1372022250, -1451892049, -1325138957, -870401239, -1294317369, 91490879, 386205044, -704074702, -1230679067, 1513674392, -262996240, 1196007314, 1398903796, 803719762, -1750926831,
|
||||
-1268814180, 1233515404, 1498313934, -970591257, 611113671, -261632474, 1834097325, 1709440492, -150396854, 2120561003, -62645660, 479080234, 1535125050, 1823378695, -1129289329, -1095198399,
|
||||
2092564733, 78836308, -692015409, 1647147229, -1847922219, 1838279320, -848333841, -1375151778, 920238861, 1512628290, -749439404, 288851918, -427218675, 679640964, 425700808, -2077624511,
|
||||
-1929434455, -647176419, 650437190, -1926749131, -1564744729, 734494454, 108193743, 246246679, 810042628, 1952337771, 1089253730, -1874275331, 1428419392, -492969232, 1945270770, -201265602,
|
||||
-755490251, -624426214, -699605715, -113446478, 809091299, -1521531511, 1136505389, -523660964, 132928433, 1926559713, -1485314325, -508322506, 46307756, -1627479740, -589386406, -1855555892,
|
||||
584299545, 1272841066, -597242658, 925134545, 1102566453, -753335037, -9523218, -1778632375, 568963646, 764338254, 1259944540, -2000124642, 1307414525, -151384482, 807294400, 1993749511,
|
||||
-15503094, -709471492, 2104830082, 1387684315, -1929056119, 224254668, -733550950, -889466978, -1987783335, -437144026, 995905753, -1021386158, -1096313388, -1014152835, -1303258241, 1201884788,
|
||||
-1845042397, 1421462511, 980805867, 2143771251, 481226968, 1790544569, 328448328, 1995857639, -66668269, -1411421267, -222586606, 866950765, -308713926, -1048350893, 993222402, -1139265642,
|
||||
-871837948, 1145571913, 381928580, 35386691, 1640961123, -1192981020, 775971009, 594246635, 1603197812, -575106766, 2023682000, -1636301903, -718093720, -1666421635, -2146115988, 320593570,
|
||||
287355418, 454400027, 1112753817, 1751196267, 782077910, -1478447368, -1007557264, -862315517, -2035355952, 2123515250, -557641502, -1789932035, 879640129, 44167603, 791148984, 1382939723,
|
||||
-2135684233, 1825489580, 937345485, -1839983359, -1536880111, -1472578359, 1548052748, -1471535862, -14508727, 1509621398, -2134967452, -787485401, 815341660, -327905128, 1028096737, 866906991,
|
||||
-1585990806, 859229080, 234806270, 998518056, -1897890815, -900923587, 1179856752, 1529572451, 620486106, 1119836556, 1661285564, 2097404633, -1437490790, 265306115, -984880135, 1326751968,
|
||||
1280043536, 680210701, 155786166, 1550973250, -325781949, -597789777, -1939780, 1345275487, 1930450001, 941449704, 669301309, 693651713, -990721514, 582968326, 976132553, -1892942099,
|
||||
-1065070157, -711990993, -688974833, -1026091683, 1115346827, -1305730749, -1733626381, -364566696, -21761572, -37152746, -262011730, 1302722752, -1806313409, -767072509, 764112137, 1671157377,
|
||||
1837645038, -1021606421, -1781898911, -232127459, -310742675, -1818095744, -1128320656, -705565953, -354445532, -523172807, -433877202, 131904485, -64292316, 381829280, 229820263, 1797992622,
|
||||
1359665678, 978481451, -885267130, -1415988446, -356533788, -961419072, 1938703090, 708344111, 679299953, 744615129, 1328811158, 1257588574, 569216282, -753296151, -1519838713, 2016884452,
|
||||
1062684606, 1561736790, 2028643511, -1353001615, 886376832, 1466953172, 1664783899, 1290079981, -57483993, -1176112430, 1634916316, 1976304475, 1374136869, -648738039, 1058175869, -909000745,
|
||||
-1526439218, 726626991, 2066596202, 64980943, -26166577, -885900005, -1821546816, -1103727665, 730606315, -1324948459, -696956940, -1300869403, 1171578314, 797249074, -1600611618, 1928247682,
|
||||
307164165, -1482476232, -1886179640, 1306433392, 1945271359, -1272113751, -1285984081, -2057145549, 795047465, 1262569087, -1239828121, 1426641636, -786371495, 2120199316, 1273690652, 74457589,
|
||||
-1033394229, 338952565, 46122958, 1225741533, 2115308090, 678200841, -1618264885, -101162569, -1628976330, -1232839500, 468709044, 1876019116, 92723122, 233398255, -554960844, 38494196,
|
||||
-406437278, 2083528643, -1106878615, -340722557, -2123964932, 223183343, 108918116, -1014629054, -901344544, -838896840, -1908460517, -1763508731, -926890833, 1703791049, -667755577, 1694418389,
|
||||
791641263, 1095689677, 1119202039, -1419111438, -2012259010, 188017439, -1775110395, -1971099661, -1688113734, 131472813, -776304959, 1511388884, 2080864872, -1733824651, 1992147495, 1119828320,
|
||||
1065336924, -1357606762, 462963503, 1180719494, -202678962, -892646595, 605869323, 1144255663, 878462678, -1051371303, 872374876, 631322271, -172600544, -1552071375, -1939570033, 151973117,
|
||||
1640861022, 310682640, 34192866, 2057773671, -2004476027, -1879238973, 582736114, 900581664, -427390545, -1232348528, -535115984, 1321853054, 69386780, -1729375922, 1418473715, 1022091451,
|
||||
496799289, -80757405, -1903543310, -1128846846, 1703964, 1984450945, 856753858, -812919184, 775486323, -1376056193, 638628840, 314243536, 1030626207, 644050997, 73923896, 362270613,
|
||||
236584904, 1463240891, -223614432, 435371594, -751940030, -124274553, -1991092884, 1579624267, 1249632649, 157589625, -345229739, -366245207, -1399995986, 1651729983, 1965074340, -1108970305,
|
||||
1163690769, 1732013523, -1461252895, 669755552, -476503675, -264578685, -32813949, 288222188, -25734262, 106040916, 1654395626, -365148479, 2014455846, -2040447994, 1351639280, -919975757,
|
||||
-1970412139, -47306532, 222377665, -363434917, -1091717516, 2090685531, -1221091649, -1729649190, -1239406708, 1064945398, -105437479, -419675255, 74701669, -12862899, -498269844, 1566898997,
|
||||
-1872838355, 1596887574, 485902962, 469225597, -881763553, 1307841032, -1642872487, 1388543045, 379792876, 1095683384, 840780732, 1934378038, 1851278350, -1359389423, 130868458, -313448799,
|
||||
-663624816, 1031714153, -608443411, -205137499, -1849464427, 1973593637, 1068741808, -1420655961, 1188762305, 954044841, -995454462, -1818101092, -1937201943, -324541290, -1520603933, 572873173,
|
||||
-554764496, 1051557081, -1245136076, -985349536, 329320398, 1787901464, -37803304, -1759310177, -1463492617, -1861729663, 1251768782, 256937091, -779036948, -2049893864, 1256022877, 1228075657,
|
||||
-1550195255, -611319853, 1190797155, 2047604112, -576077160, -1532843331, -1324899394, -159729560, -622525946, -1080302767, -236033484, 1895243903, -410123689, -1944154157, -681781021, 1208453003,
|
||||
579595878, 1303914051, -145607082, -131567277, -1917288455, 894217359, -175688726, -1585480723, 663691440, -1140068263, -641711178, 1596080008, 629197693, 976422358, -1570451095, 525923776,
|
||||
895046136, -504151767, 1602553020, -1233054923, -1798474837, -1488857895, 1055782627, 261863143, 1879276655, 488240679, 1910982611, -1919441259, 370435945, 1265230086, -1293284428, -1503576227,
|
||||
2076963035, -1379628250, 1157098875, 1984461153, -1947837397, 1705880124, 1453607404, -1233649748, 1479943773, -863878721, -862415630, -736723275, 940306358, -1596000684, -1174889953, -615723892,
|
||||
-885006597, -1796723178, 1844159055, -188942309, 2107251811, -1675486996, -1009475178, -859263556, -431866963, -9593673, -1878920923, -104853791, -1535224994, -69315537, 586690130, -1292234796,
|
||||
1378749456, -301873019, -319297563, 1677205851, 292450579, -1289441171, 1788113680, 1907606333, 1464711611, -1372023606, -1978832445, -1772259768, 1949124464, 1818322887, -1138036603, 1249727628,
|
||||
-1474866449, -1868013169, -1384567593, 717007936, 954189997, -1900561040, 738470389, -158973180, 1732860784, 1936031206, -1133354740, -1173166665, 1432976712, 852636081, 1732064691, -1831788120,
|
||||
1273933579, 455403217, 1988395890, 106493468, 506092152, -610530423, 1698053512, 1311747476, 1969503012, -1887461759, 1613543073, 903200334, -737865837, 325656800, -1234001200, 1492148864,
|
||||
2009861533, -368262605, 1091338541, 2076108119, -961392337, 1835877112, 316250307, -853333391, -2125443777, 815363504, -798707803, -158146540, 690786114, -530775684, 1203556940, 1611485582,
|
||||
-1661412270, -53184506, 2126287444, -232222229, 1559486057, 283532250, 1202760418, 932144172, 1082594656, -570104011, 413509167, -995027177, -996477516, -540544, -745537167, -712135469,
|
||||
-996294983, -592787198, 1889840948, 1314628747, -394266926, -682316577, 456447239, 1728806063, -396279614, -43387643, 1915717013, -861574144, -1078710588, -561401249, 1111464540, 63643984,
|
||||
-1693870413, -968369980, -1053148188, 708799038, 1883537988, 373371671, -156410415, -1596483236, -1846890431, 888692915, -1025632583, -1666477591, -343066267, -2059058792, 641501628, -1744347292,
|
||||
1648632991, 1743540146, 2020952406, 164014499, 990508262, 1706408228, -1236471842, -347116260, 1843634523, 827255665, 300519853, -1265974830, -547247177, -583064554, -1995437077, 689210107,
|
||||
-93151393, 835365056, 1706367315, -1605902756, 200954895, 431093688, -277573364, -928486713, -552221973, 145432789, 1128919795, 1675095586, 1930359882, 1215849501, -1447770583, 657776490,
|
||||
1885869860, -1629237204, -868897479, -1258169760, 1828140195, -883850439, 463933909, -347361158, 1478116648, 801176896, -1501915899, 1017335748, -1654508882, 123994786, 1588785290, 791166651,
|
||||
-1523108535, 340411166, -496474762, -1189711141, -7392628, 2045171250, -1245366209, 834787230, -1346883181, 2034209454, 737043362, 898803323, 1983089087, -1845404320, 9585188, -1180608323,
|
||||
1665100606, 1949474222, -211115008, 1151308295, -2132174259, 913126312, -2085061672, 1419864120, -1134542954, -53833957, -246913211, 468382370, -1759479323, 1136686211, 1307012488, -2036299559,
|
||||
-1346099736, 314743106, -1683101865, -947151948, -234529696, -2103334293, -279256894, -1484257, -1053953017, 1801205399, 941594454, -874119215, -672865187, 762284205, -1494975451, 486607927,
|
||||
-898264389, -1711861093, -212572760, 2106484281, -1610786470, 1352525590, -837779586, 1568282001, -593019125, -1146260782, -1595879979, -640781858, 1107692311, 1547132709, -1928385535, -2057772805,
|
||||
634887038, 329772618, 942136006, -864405576, 501883884, 1537141484, -1180626836, 1123055420, 1090885851, 421662750, 2033111605, 1710917425, -1118058244, 74321279, 257328195, -1199940697,
|
||||
208625996, -442341447, 808119183, 1166827075, 1177417517, -1856155370, -1464837036, -60624923, -1306220638, -91104698, -1434621430, 548899241, 37351476, 1478278431, -1255061434, 248470035,
|
||||
-104642597, -1865169521, 1418373655, -1660810523, -2129015436, 154612798, 276575732, 1930338442, 179503250, -929294855, -39452027, -1377657544, 1442322193, 1137511318, -432158653, -984801987,
|
||||
743099148, -1118893528, -904123623, -1273146363, -1884800406, -803169061, 1254123158, -484252077, 317646844, 404246525, -1230293916, 1121445742, -19657507, 652967153, -1055406692, -468950719,
|
||||
-1493532921, -1447624258, -1369679689, -1517000228, -145853307, 1518006526, 1591195514, -1475557146, -909722097, 2103182976, -406830579, -2124025254, -1804819507, -1357512858, 567321869, 409048156,
|
||||
567805180, 1749009386, 1762759722, -1770324077, 1271140844, 468219092, 955792405, 1911965665, 1876314424, -718200715, -1278883927, 1392281730, -120519585, 851473793, 245054754, -33369039,
|
||||
-284877584, -479534880, -212346563, -122017521, -1461429983, 1331007370, 1788621721, 1739036536, 1446350953, -1985448033, 685528610, -1386434659, 1368233993, 2021786790, 1596478397, -1716635278,
|
||||
-2011083017, 171876097, -311529197, 687812052, 377000657, -1055547517, -1499047842, -1818434951, -120863666, 33888043, -1387509273, -541540700, 1162597745, -1331415338, 1931708792, -850270000,
|
||||
663845594, 1536495943, -322924971, -1380272203, 261190298, -204874428, -2104974031, 883819928, 155808204, -1454446035, 1323388464, -1696505728, 1549800285, 1018150463, -1327715703, -1582480640,
|
||||
1013659809, -1820360082, 1666498787, 1406120540, -196541482, 1248470531, -1250433281, 836375878, 177646854, -1927020253, 2145878321, 689712096, -596605921, 348283199, 1916993096, 481356808,
|
||||
-339687826, 1219340319, 718895887, -2007521340, -1859185806, 2042164737, -58146784, 742449142, 1930754708, 780832111, 715056441, -1393886151, -8150527, -599607443, -537300865, -1212516084
|
||||
};
|
||||
|
||||
for (int i = 0; i < refInt.length; ++i) {
|
||||
Assert.assertEquals(refInt[i], mt.nextInt());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class Well44497aTest {
|
||||
|
||||
@Test
|
||||
public void testReferenceCode() {
|
||||
int[] base = {
|
||||
740849862, 1202665156, -199039369, -259008301, -291878969, -1164428990, -1565918811, 491009864,
|
||||
-1883086670, 1383450241, 1244617256, 689006653, -1576746370, -1307940314, 1421489086, 1742094000,
|
||||
-595495729, 1047766204, 1875773301, -1637793284, 1379017098, 262792705, 191880010, -251000180,
|
||||
-1753047622, -972355720, 90626881, 1644693418, 1503365577, 439653419, 1806361562, 1268823869
|
||||
};
|
||||
int[] init = new int[1391];
|
||||
for (int i = 0; i < init.length; ++i) {
|
||||
init[i] = base[i % base.length] + i;
|
||||
}
|
||||
Well44497a mt = new Well44497a(init);
|
||||
int[] refInt = {
|
||||
-1464956854, -1524360321, 986845646, -182050548, -818943186, -1744848370, 1392434650, -182648505, -2026593838, 1254866610, -410459761, -1392048371, -968730026, 1485793687, -728749746, -112685463,
|
||||
275126404, -1101838984, 1193096287, 443511615, -510869213, 549869992, 1974458428, -1217587840, -335835016, -2048974745, 1066947099, -611611187, 1978925459, 688164478, -463344808, 56995910,
|
||||
699288809, 606392470, 117418673, 1948706703, -485598135, 385841705, 1725261146, -919553921, 70643668, 2128611684, 1720197347, 738706713, 1162026860, -611442152, 1469145601, 2051653750,
|
||||
609067755, -1971782890, -971114565, 776260144, 1619791127, -1547233838, 1502505722, 913168193, 1761269649, 81782996, 62251540, 1519079156, 1239007000, 489633356, -800433470, -2107278046,
|
||||
495320431, 269446836, -2013306553, 1074614697, 1645125348, 584369930, -405429577, 1211134012, -2060113546, -2047824, -443978800, 271218497, -1002185964, 1519315874, -695096464, -79101601,
|
||||
-1521653608, 192426133, 1159511202, -1354494985, -477280535, 583522228, -661741458, -1251175621, -369487281, -2015449518, -2102058930, -645264919, -925270025, -1674575999, 1363844609, -831732660,
|
||||
-1668989157, -1861246633, 83763283, -1056074975, -519054258, -1546386261, 1691674654, -885968657, -1189571815, 2095154843, 1686743191, -1859471265, -261593938, 1721982136, -491120252, -949699153,
|
||||
642525852, -2005306625, -1004765905, 742736856, 1653443876, 788423835, 1536155740, 879514143, -1510757104, 115238646, 28600662, 1485490803, 1272460710, 523153480, -766782926, 1332478031,
|
||||
528775440, 302965264, -2046891123, 1108139271, 1611601128, 550846467, -439082190, 1244786747, 941120547, -35568474, 1756370964, 304870369, 1902684028, -408710726, 1673189520, 1180987663,
|
||||
-1488131864, 158973303, 154514890, -1387953397, 1453732833, -1342263302, -628153633, 4710424, 619931109, 721411332, -2135645486, 1688696681, -891749588, -1641122924, 1397432310, -865254619,
|
||||
-1635468227, -1827787970, -1311416657, -1022618057, 1411688086, -1579840139, -637954674, 2115653281, -1155985079, -1043532593, -374286955, -1825883832, -227940643, 1688394137, -524577925, -983222470,
|
||||
-1955769926, 626525757, -2009760930, -1855453635, -676923169, 754966926, -291202391, -2126042921, -1477304277, -1409345382, -1264640578, -441993991, -17611930, -1576809974, 2137694350, 1299022733,
|
||||
-762509116, -1087399293, 819303572, -14571174, -719035481, -1644675278, 1492736905, -15038081, 974773023, 1087127339, 1790024863, -1493135734, 1936273291, -442361741, 1639666948, 1147532756,
|
||||
174955156, -1537685747, 187972574, 275303083, 1420277149, -1375787574, 1873043153, 38164241, 653451946, 687758113, 899667071, 1722219976, 2146668333, 587401069, -26582672, 2034645447,
|
||||
1401801794, 1043291001, -1277898614, 2116116828, 1445274301, 150534325, 469242183, -937704471, 171074779, -204638071, 1269913689, -771734064, -12280461, -1182158859, 1704390140, -263303749,
|
||||
-848503723, -1822849148, -634064465, 1130988864, -1515750310, -908815400, 1487214333, 994482967, 853103628, 1711185413, 1520342001, 1067859186, 1693632130, -603831333, 292236742, -800655385,
|
||||
-1467184928, 221125007, -1697377800, 1293953144, 1730537111, 1073329737, 519625212, 689636032, 1127394154, -1496469136, -1214585810, 822152197, -1572579275, -527866383, -996792678, -2058452887,
|
||||
-1133767559, 576275042, 1579109209, -295089371, 1502267384, -724281876, -911879875, 1131096177, 333026744, 1238706603, 1067340063, -745697708, -973992204, 1560446744, -664017057, -616056490,
|
||||
1099714049, 674159948, 383625825, 1411443110, 1862818263, -1896254899, 1322476914, -719144734, -1540101945, 988154902, 781856577, 2013381051, -2059071359, -142073207, 60252832, 2052050421,
|
||||
-666391497, 376633738, 1663011481, -1706886481, -1870003191, 1003819645, 898131216, 778824906, -656875645, -1730811011, -1751653787, 2056079904, 231977636, 1831419220, -465545074, -1505266471,
|
||||
1034419975, -133864043, 1876779821, 1879792902, -100100435, -959264741, -472668436, 203584096, -46980157, -1478047098, -979669209, 809008494, 1279644171, 2055793632, 1385672419, -1756428826,
|
||||
-1790481031, -2089665073, -1608595011, 457322987, 1267418945, -19541848, -796352273, -1049973752, 30940894, -539710199, -1097391703, -779353550, -1328320498, -735447662, -918513196, 1516945649,
|
||||
1218919237, -251287485, 1826366637, 353082340, 889839220, 399638904, -1462573609, -618450466, 1429903706, 2095548034, 1486594475, -1053248922, 74346322, -357998703, 1790710495, -146359619,
|
||||
1581657509, -797737661, -920778913, 608399665, 646679359, 1861775150, -1014371223, 476735306, -1577737028, 383018939, 1234592859, 344770283, -472763155, 187217985, 1245828866, 1936329359,
|
||||
61243025, -1979390025, 903671173, 302699505, -1677126111, -1194113496, 835857595, 706998946, 70931462, 1374113464, -1464459699, -231081598, 1366205112, 396990527, -1615015619, -968458597,
|
||||
457632575, 24361353, -1120685182, 2101590608, 1654666456, -1208442054, 579414359, 1078056578, 217408674, -1560683025, 815178420, 1219326466, 450032327, 774403237, 54597342, -664057229,
|
||||
447132403, 50603973, 435640301, -1224073863, -1339908037, 1775470944, -1378119263, -1375189988, -1287971162, 29816317, -1313418882, -1824967031, 443540716, 11064217, -1463969487, 1967601549,
|
||||
124474667, 1230898256, -1741455555, 561643750, 933295231, -923145874, 245538199, 289478386, 200552280, -268887021, -1598221376, 1236123270, 318325803, 773964550, 191670680, 158043961,
|
||||
-762639146, -416703928, -721969492, 1664330785, -584949010, 1509045840, -2066001147, 1728613092, -1103375821, -1262079070, -2034789427, -418216342, -546365126, 1235751589, 1639799329, 2085089663,
|
||||
-697590049, -2007054256, -147701903, 209371702, -1868450893, 1241065116, 1537364837, -1035970557, 318040217, 150492098, 1841159805, -491979749, -1275490577, -1759443566, -697538216, -1589624976,
|
||||
-678703557, -189067001, 1539472677, -1396089831, 271512148, 180483983, 483714313, 703861378, 2122114992, -600097045, 522009268, 160429181, -744428886, 1541223403, -1211039718, -1167643980,
|
||||
1551471162, -816207368, -1429258613, 1350901561, 1934120609, -961643277, -214772286, -2128270227, -1561239720, 1493926966, 1376671007, 94966082, 221846150, -164351411, -51309876, 497148497,
|
||||
1233668542, 266257753, -773473851, 953946385, 420815294, -1390653175, 1834391782, 4704447, -891751440, -744104272, -1082756642, 1431640408, -1912055536, -159789461, -704946016, 1956368139,
|
||||
642279822, -374415338, 1562655802, -272964020, 1071498305, 667364168, -1546405154, 341389690, 1360662999, 377696332, -437020076, -1668574556, 1242655350, -756555890, 645954261, 1914624235,
|
||||
2134904445, -247737098, 143667521, -17668806, 1804148531, 414247300, 1030053929, -1595215075, 887532426, 553113691, 1173830167, -303724353, -280418143, -1143962122, -1898518451, 36464746,
|
||||
1189572700, -1549967582, 1093341440, -452303819, -731023001, 1111173883, 1678013973, -836458212, -842956392, 212774049, -845621791, 966282353, -823130040, 700410571, 619075141, -304785045,
|
||||
-1816233676, -1789653997, -166914694, 690663021, -669570330, 1098624444, -987380984, 452844935, -1089825546, 1221160503, 1217375341, 512281644, -1106887134, 1665404458, -1462594714, -207498587,
|
||||
-789271490, -723469709, 512055365, 1445951882, 1692473633, -996873493, 1445046730, 993087194, -1666188562, -897427329, 1008869698, 1236029718, 1499207233, 1704947182, -1815799281, 686399988,
|
||||
-475436580, 1588892458, 884859588, -471913926, -487416631, 1323960741, -1257612174, -468909314, -1866654496, -1417895838, 1707647971, 997140465, -1358794225, 1929422460, -605622778, -1587468566,
|
||||
469149623, 1121515927, 748484204, 1201983830, -1906623591, 76398473, 261109068, -796025669, -1964466661, 1739898262, -756850622, 1581369453, 1484675811, 484136467, -705983890, -1357931714,
|
||||
548520423, 741992908, 1017931838, -2078503520, 2097871343, 569233897, -91903627, 1864053450, -876129714, 336670307, -1950420274, -872316480, -662220291, 275724295, 703565412, 1334248646,
|
||||
-217559198, 1044090753, 743502488, -1518545318, 20614180, -768582053, 976522354, -25129962, -983639284, 71722595, -119236393, 368844119, -795808244, 696073964, 1379765302, 235083623,
|
||||
666280330, -1313689346, -643870520, 534522699, -250414377, -1239276164, 159264592, -1119503518, 1168161619, -1366518946, -1335653301, 248092140, 1390152547, 2051602724, -1023547981, -1479782621,
|
||||
-1785785862, 1609789158, -919124123, 1703200068, -852553456, 1573706142, -376011685, 305068766, -1231775451, -1536883494, -125122369, -896696968, 852651567, -458154391, 747781704, 1173040469,
|
||||
-1569200836, 312506093, -1680530410, 117086271, 794587661, -1231003908, -1048955503, 2119305423, 1636729108, -522378372, 1627421730, 545077470, -1683264872, 1486496559, -1793064672, 1908368749,
|
||||
-1226052295, 1399248776, -588193954, -1289386125, 534647065, 2126245059, -238362987, -1244573058, -1571832269, -2052693379, 1494767731, -528668449, -980826491, -151282847, -1468523556, 1876349941,
|
||||
-301654558, 1467960576, -741720848, -612158589, 92376910, 987915105, 1037689578, 793773489, -1387669541, 349490139, 564784004, -1161242130, 619703053, 2063233129, 190888106, 81845991,
|
||||
-1482466066, 283234313, 114355492, -1879406787, -1283370924, -1378903370, -730141747, 1570738286, -281348873, 2131743196, 795654462, -497365688, 437612465, 1928618254, 1433118279, -1801292119,
|
||||
-2059248836, -221673230, 163637697, -411319468, 244353317, 786753178, 489172932, 464627154, 1258915212, -229028334, -994675463, 1931657329, 1784181437, -97111947, 1728952452, -1329133577,
|
||||
-1606156362, 1341196121, 1679632329, -796545286, -1021125869, 1427825468, -214986389, 250791528, 1029777000, 90661677, 602529506, 2068040879, 1483801763, 2332097, -457467017, 672399614,
|
||||
1542769193, 1781253216, -1967165705, -2052227925, -1248173215, -1676554121, 292413596, 209649573, 1750689340, 1946874730, -832845570, 1774178655, -450175610, -431901779, 613330756, 1969434259,
|
||||
1251099237, -1320908513, -50659188, 273178515, -296290724, 1195998469, 1329813722, 759419114, 1003396150, -274557619, -548886303, -2055397788, -766678640, -464045978, -1835907569, -169406709,
|
||||
820751456, 1778613303, -1582073956, -1728391771, -2075389498, -1606584632, -1702107251, -15724560, 45610235, -1967510298, -671487775, -1841110041, -913365944, 869680052, -798103472, -1564096927,
|
||||
-918899909, -810066882, 428829752, -1413487973, -844240890, 1343914280, -689285374, 1827745702, -799686631, 1696465705, -726159000, -1381157526, 1649221296, 1791106481, -1872852642, -485685063,
|
||||
1534949133, -1611901907, -581776031, 242740701, -382394666, 668419384, 388297992, 748818886, 713804061, -1783774172, -1823401590, -1009098384, 2071462929, 1154475522, 1309810666, -1734475040,
|
||||
1212095416, 988288210, -1457428115, 1699730041, -1804729443, -1922824494, 1000076038, -226555981, 131425181, -1071582828, 357680377, 1574190179, 996651958, 965704429, -47651768, 243931978,
|
||||
808955117, -652323633, 544967309, -1199510217, 702795379, 997685748, 1593927308, 2119371055, 1451401230, -41992913, 2033816081, -1030495962, 1764010175, 457470691, -2001190141, -373358035,
|
||||
-1950331268, -1291674220, 642934467, -1825725718, -1555687487, 1664472129, -24722338, 1899539596, 78519318, 1662555805, 1744711308, -2142888582, -1597853572, 118030659, 1596713428, 404304267,
|
||||
-1350880388, 648702031, 1185458591, 1798138033, 819516445, -1466759682, -751277607, -879817426, -1931050435, 1465603177, -1402344216, 768491239, -1404853657, -1915685264, -1845859847, 313163207,
|
||||
1239598382, 1988767047, -555152530, -1925665864, -182399255, -1392390808, 64861291, -511875035, 1879964459, 918905020, -840773616, 459610189, -1522352470, -1821396360, 977274705, -60616465,
|
||||
-1846727880, 1208592937, -515359427, 1127607806, -395032287, 491869604, 2053794084, 568321750, 1597027438, 1355613070, -2069482724, 1899252555, 844726247, -625112193, 1146099491, -1037855139,
|
||||
1203928737, 1875686061, 994108281, 1471873396, 2026801570, 4941446, -1066074241, -983738686, 2037429697, -836521112, -633388883, 1221918725, 2137035208, -369891832, 372509548, -110916409,
|
||||
80517712, -658056946, 727893428, -1353651002, -475459562, -291323023, 1059377566, 591801919, 1018232602, -348255729, 1863827426, 246032476, -1026132864, -1356383176, -1224690998, 262442981,
|
||||
1257773681, -1738604660, 77131430, -1320261233, -2342727, -1817187590, -1883997191, 1367221809, -1863623746, -1132606249, 149024763, -1228275128, -578030399, 356914163, 2109691820, -880313621
|
||||
};
|
||||
|
||||
for (int i = 0; i < refInt.length; ++i) {
|
||||
Assert.assertEquals(refInt[i], mt.nextInt());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class Well44497bTest {
|
||||
|
||||
@Test
|
||||
public void testReferenceCode() {
|
||||
int[] base = {
|
||||
740849862, 1202665156, -199039369, -259008301, -291878969, -1164428990, -1565918811, 491009864,
|
||||
-1883086670, 1383450241, 1244617256, 689006653, -1576746370, -1307940314, 1421489086, 1742094000,
|
||||
-595495729, 1047766204, 1875773301, -1637793284, 1379017098, 262792705, 191880010, -251000180,
|
||||
-1753047622, -972355720, 90626881, 1644693418, 1503365577, 439653419, 1806361562, 1268823869
|
||||
};
|
||||
int[] init = new int[1391];
|
||||
for (int i = 0; i < init.length; ++i) {
|
||||
init[i] = base[i % base.length] + i;
|
||||
}
|
||||
Well44497b mt = new Well44497b(init);
|
||||
int[] refInt = {
|
||||
-102003638, -1254584449, 836441550, 1949705484, 653000494, 1579400718, 699652570, -140738233, 1164288466, 419933874, 366568847, 780567309, 1867405910, -350557801, -964350642, -1323492759,
|
||||
191502468, 398676344, 1568976991, 1005053759, 199053603, 31083944, 74697788, -1343941248, -1205631880, -1637961625, 361813531, -1706096179, -403340909, 1666226814, -2034962600, 1237102662,
|
||||
-1833248535, 1584255126, 1295661745, -1753848945, 1208145993, 930278953, -733716134, 192752767, 1692463060, 1727273316, 2122952931, -809025255, -992081044, -895539688, -419372543, -1835478922,
|
||||
2089629419, 1646590742, -1261083717, -1005462992, 1619627287, -1437723182, 1619689210, 1319393089, -1816963183, -150214444, -513482220, 1897815796, -1861960936, -1766444468, 2034653890, 585657634,
|
||||
1867016559, 696942260, -1536237241, -527055447, -1554805020, -1063992566, 1024799415, 1782080572, -1884276362, 129028272, 1427925968, -1154222271, -1383146732, -1580532830, -1907049616, -104299169,
|
||||
-1780913000, -2090815339, -1789809502, -1521443849, 1226625769, 1126090676, -2117094290, -449575109, -218982833, -695554478, 35923022, 1386126825, -95031305, -168657023, 436674049, -1137917876,
|
||||
-2045134053, -1025629865, 133144659, 64226081, -1966942130, 700813483, 344058910, -910646033, -212789479, 740360859, -1269028713, 1517763679, -664178514, -683718472, -71951996, 86583727,
|
||||
-1235669348, -1426987265, -166598353, 214190040, -1436967644, 233824411, 710927452, -1939548641, -433607408, -1075939594, -1549702826, -1310827917, -640604762, -696863672, -1282162126, -546470833,
|
||||
-1516734192, -513809904, -458526835, 708926727, -476643096, -2108375037, -2870478, -1460116421, 436587555, -948939610, 1891375124, 1944216545, 959034236, -1267038790, -1695098736, 1853748495,
|
||||
1594424552, 1270099319, 1139585482, 1837434635, -709909535, -457524230, -887118113, -241703912, -1888225819, -751575804, 1122280146, 1194255209, 949350188, 892826516, -791212042, -151203035,
|
||||
-859297731, -1979039938, 323603119, -1022065097, -1804294506, -385802891, -2127523442, -720380255, -1315859127, 999649487, 335041941, -1732821688, -1833409827, 535715225, -1285355653, 1206723386,
|
||||
-1141619270, 759796285, -1599504546, -1988521411, 1056668895, -852564594, 1056509609, -1831687977, 754168875, -1301144422, 922880446, -1502666503, -949791898, -1043870198, -1136941938, -1649670259,
|
||||
1342769348, 1692605059, -132279148, -1108038310, -14355545, -1611387086, 1651826569, 877600127, 1356160799, -759125205, -1300490081, -414938486, -201479285, 1958709363, 1513313540, -1396836908,
|
||||
1352702612, 1142506253, 52969438, -365142357, -1619054179, -1368514102, 1470750417, -1420830959, -843909462, -1679570143, 1447444607, 234551752, -1507452115, -1433234579, -680890000, -497305145,
|
||||
860408898, 263376761, 1537070218, -592353956, 1587852989, 1756653749, -2081320633, -1547020311, 723771611, -883819383, 1899879513, -268417584, 1058606451, 1665941493, -1630340612, -614737477,
|
||||
891313237, 1368950660, -1166187089, 296322368, -1908770726, -2120378408, 1245479677, 1879710487, -1705947124, 1018371589, -1715010575, -1096078094, -1749891454, 2130888667, 318647750, 554592231,
|
||||
-489121568, -1809605233, -1697905160, -953926536, -2013960553, -148884919, 1822739964, -1466301760, 141999978, 1946526064, 1323036718, 864390149, -2141665227, 1510602225, 1468408474, 1277039721,
|
||||
-1368096647, 180965986, 2140852057, -688071899, 819713016, -154385940, -1182972611, 1257224305, 1392607672, 1364245931, -1768434401, 323522132, -555278604, 474186520, -1178901665, -2137343658,
|
||||
1636421121, 1398987084, 1276656225, 1013316006, -955917865, -1537149363, -179145358, 342862050, 1172728007, 736300054, -1114656959, -1831840325, -1882353535, -442915191, -1206488416, -1818534411,
|
||||
25312311, 2100297098, -1562767719, 1762553519, -1853194231, -1152612739, -2020055792, -809572150, 848584579, -535789699, 1817604709, 1343773216, -602234204, 1739930964, -833790834, 501215449,
|
||||
-730104057, 1217783189, -681773267, -611951354, 978387629, -1516811237, 974303980, -1389665696, 2091099075, -727528826, 2116026151, 271935854, 613242379, -2100429856, 190004963, -1629612570,
|
||||
-1362888327, 175094223, -917873219, -2008308245, -401946815, 504218792, -1966525201, 4106248, 164895454, 226502921, 655865257, -610528718, 189428750, 1055978898, 17603028, 591024369,
|
||||
1127922501, -1546639293, 1994174637, -724136988, -673919372, -1665002120, -612145705, -793102882, -1904763558, 757565058, -2091240021, -2123324826, -1518702766, -802889839, -223045921, -1509216579,
|
||||
1195556261, 2079259971, -903969953, -1781800655, 1834950463, -956531922, -1152550807, -1116052662, -348802884, -1395330117, -91758501, -19115285, 1926930669, -1015793599, 545904386, 1617858191,
|
||||
716963473, 1917089719, -980914811, -212646927, -1634695647, -1857924568, -1462257477, 1273750178, 1060328454, -361604424, 867932749, 451213698, 405780152, 1165233215, 1877230909, 2103114395,
|
||||
1644330815, 1252998537, 1961603970, -1533101488, 1790456024, -38226118, -1306744489, 713676418, -1535871838, 1378109935, -338185548, 1647669762, -477465913, 203482277, -1949756706, -503326093,
|
||||
-638704909, 320186309, -1435581459, 907446649, -77384645, 537368928, -335347295, -1912061924, 547819174, -225549827, 1089455486, 463516297, -240127764, -85895271, 2053179697, -287394931,
|
||||
921878827, -933362608, -1178670275, -1200942874, -672571265, 574422382, 1441734039, -1814493454, 165751640, -176907245, -1170992192, -2123252090, -1435971541, 1591853830, -885477992, -792847559,
|
||||
1359875286, 1038392904, -2027255124, 687291425, -165513490, 1391146576, -1387080955, 794663652, -807189965, 667820962, -545384499, -1371368854, -689031878, 1504805541, -752825823, -1920047745,
|
||||
-1884874017, -350566320, -197152911, -181743050, -798415949, -915922276, 1790690149, -363997181, 1923116185, -1326427198, -1621079427, -1997440997, 1798118127, -2053110382, -159879848, -1286787216,
|
||||
1046436411, 1832030471, -389092059, 71686169, -76025260, 1914270607, 1854169353, 872157826, -1774323792, -575165717, -1919931724, 2051498109, -1176174934, -883578901, -1253047270, -1310573900,
|
||||
245466682, -1784824328, -1319912821, 1377340217, 1364313761, -408687373, 142333378, -1952335763, -1703126184, 316314678, 2030555423, 488640834, -1783293306, 2116925005, -428337460, -42966447,
|
||||
-476226114, -325172903, -1690748475, 852791569, 26490302, 85251337, -1374975770, -376283969, 982639600, 595119792, 376403422, 1574509912, -1509664496, -1901241749, -59019104, 358566667,
|
||||
341667214, 184541206, -550950854, -1897143732, 1595753537, -1236127928, 2014297822, -2033179270, -669806121, -1927596980, 1010735700, -581795164, 1922398838, -1456743538, -1633813803, 323177707,
|
||||
2002098813, -2099067658, 277393729, -671911622, -384463053, 2028267908, 367391785, 1270052637, -172839030, -650486693, -831800809, -1255138113, -137512799, 1904317942, -8229811, 707361898,
|
||||
-276859812, 50417442, 1487081728, 1577776181, 1994451303, 1237303035, -602016235, -1905218276, -1895725672, 1172978849, 801129953, -1819485071, -587985848, -2010386741, -1645226427, -850866837,
|
||||
816998708, 357665811, 1955856762, 1617902189, -1013761306, 146782652, 904185608, -500146809, 2085848310, 1917713975, -1823786899, 1994184748, 789196322, 1766857258, 1770685286, 58213029,
|
||||
-1699628994, 346827379, -1274423227, -5079670, -193099487, 1020296939, -1795904054, -1951053094, -43782418, -375403393, 1026761026, -207269610, 1364563521, 1578793454, 457809423, -534138380,
|
||||
-1052938788, -1897101526, 1449976516, 2052800058, -1145169719, 1476303269, 370625650, -325249282, 2165984, 1631432802, 1032336355, -1292978191, -1810172401, 725725820, -1162678778, 702624490,
|
||||
1387673527, 981825943, -556408212, -1108487850, -1782136935, 1582316425, -1752682164, 307235003, 1386486299, -1343636074, 1936875586, -1265279891, -345847069, 928241171, 239050350, 1859358526,
|
||||
-664776217, -823267892, 346651710, -867656288, -1907921425, 1362445801, 541145461, -192727350, 1649366606, 244694627, -488180018, 214008256, 2032125437, -1678591993, -264593820, 1309017286,
|
||||
-652451998, 1845366657, -703990120, -550186406, -630285276, 1782372955, 1650564210, -1127904234, -1407983860, -1119422877, -1565976361, -1913545385, 549841420, -1410323732, -1964467146, 228296551,
|
||||
-421026422, 1929094398, -266906424, 264810315, -2008122665, -1088278148, 141242192, 1871293282, 234634067, 1724159838, 1638271051, -837713428, -657941661, 168093988, 708605363, -1881612509,
|
||||
-1810496006, -193495322, 1889982309, -2050702012, -693694192, -1249780322, 718733403, -76349730, -188217051, 920912090, -1814078273, 2013358456, -1948845521, -198407575, -1248904632, 1182772565,
|
||||
1236791612, -1297489171, -1958468586, 1437011007, 390460941, 113068796, 1247982993, 2102889679, -1563524844, -128174212, -754095070, -1461699362, 943615640, -1013270737, 221253920, 1514140013,
|
||||
1596946745, 674222984, 616356702, 1811224435, -1764322023, -1653707581, -1702404459, 390678142, -209506765, -1398278531, -117061517, 1625861343, 659048069, -1490678943, 846536668, 210715637,
|
||||
1855458786, 1727745280, 1086729456, 1109111683, -985298098, -1813777567, -954599702, -1522494031, 1166103515, -191868965, -1048777852, -661271058, 1161457421, 1509090409, -919753558, -155431193,
|
||||
-1774302994, -366390263, 2090138916, -693431491, -1693888428, 1846774454, 925855693, 474383470, 208889079, 382195164, -283005634, -2095134392, 579927985, 1390765326, -1766119865, 900457129,
|
||||
-1503703236, 974952690, -107714111, 381338452, 1187256613, -860560742, 524103620, 1499506130, 197755276, -790802926, -406920967, -1972219791, -665721155, -113336203, 1037154436, -1185441801,
|
||||
-745541706, -546274471, 1988928457, -1975403782, -1167172845, 777779004, -1560935061, -140258712, -1243598232, -1394149587, -785002782, 311842991, -1025469277, -605350463, -1251538057, 537203966,
|
||||
597777961, -1845767072, -1556349193, -1491015509, -1935936671, 2093498487, 1908270236, -315396187, 1356362300, -2025658518, 630119678, 276190559, 510123398, -1266145363, -170152124, -151540077,
|
||||
-477900187, 1895894303, 1870333068, -1169891437, 353366620, 2111175941, 1691245786, 1318765802, -90993610, 921309517, 118241505, 367005284, 1624861072, 2010785894, 865255951, 1717799691,
|
||||
-80757664, -644944841, 136999836, -341686875, -1908076090, -1968934200, -346397811, -184213520, -511811333, -2118173466, -1086490399, 1795322855, -635494328, 415716276, 851044432, -904636831,
|
||||
-1972230341, -64337858, 571177016, 1248814747, -1351030778, 457872680, 1843549954, 1718960038, 815088665, 1812961065, 360686952, -1356586646, 1657802416, 1776192945, -786723490, -342254407,
|
||||
-236653811, 771014701, 906386785, -308057635, 1907957462, 206000440, -42143480, 900403654, -917549795, -310520796, -1713627766, 2061136240, -377977839, 891282946, -821163030, 328143584,
|
||||
1503793080, 551621842, -2086273683, -2070526343, 91195293, -1654389038, -1035734266, -336619597, -1220221027, -1468468844, 2105626873, -841372573, -122707018, -2013073683, 494461000, -2054807734,
|
||||
-67946259, 1914163407, 1941835405, -1027244745, -768123277, 419129844, -275750260, -171533009, 97756174, -17651409, -1578102255, 995291430, -1587462977, 692904675, 951632643, 1882101293,
|
||||
-1546298756, 2018418068, -1790777661, 1542305514, -1437624383, 469587009, -1647853474, -1318279028, 497228822, 726733469, 1693133452, -2091185798, -209017732, 126386499, 1056958932, -2105494133,
|
||||
754067324, 96463951, 83701151, 1101658289, 1485852701, 553783806, 1898769881, -1072031442, 1438062141, 1992540265, 1152252136, 1019391719, -175951257, -6691216, 989789689, 968359367,
|
||||
-1330392786, 1704963399, -998432914, -948060232, -1921688855, -975840920, 1360273515, -872810459, 12676907, -1908050756, 883609616, 65641549, -200365398, 1386653304, -1203665071, 1878689007,
|
||||
426262328, 315375145, 1900325181, 703658494, -765404895, 1070155172, 1399748900, -804264234, -1619419026, 1347225486, 230635292, 1093717835, 14020583, -2107039873, -968325341, -1679158691,
|
||||
1959784097, 1065690797, 1090615161, 1311445364, 865835426, 870016646, 574122879, 1842697922, -1289210431, -1914001560, 1672467629, -900366331, -1524066872, 136503816, -1910431892, -1431958329,
|
||||
-830367152, -1316233970, -801974860, 1560669382, -81784810, 401822577, -949103202, 943897151, -722666726, -96825841, -1092898846, 230567004, -70355840, -1398069192, -312953142, 1475420133,
|
||||
-622491023, 1661205388, -19071322, 6024591, 1473041593, 2053897978, -1346768903, 1484764721, -1552461890, 1287146711, 1613069307, 902497864, -1504480063, 375292915, -836353108, 2047602411
|
||||
};
|
||||
|
||||
for (int i = 0; i < refInt.length; ++i) {
|
||||
Assert.assertEquals(refInt[i], mt.nextInt());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.commons.math.random;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class Well512aTest {
|
||||
|
||||
@Test
|
||||
public void testReferenceCode() {
|
||||
Well512a mt = new Well512a(new int[] {
|
||||
740849862, 1202665156, -199039369, -259008301, -291878969, -1164428990, -1565918811, 491009864,
|
||||
-1883086670, 1383450241, 1244617256, 689006653, -1576746370, -1307940314, 1421489086, 1742094000
|
||||
});
|
||||
int[] refInt = {
|
||||
1634813289, 1876773016, -973836208, -2130023652, -1045460084, -1834384857, 1691032973, 609714289,
|
||||
2033920362, 555915483, 6680992, 1958127415, 1866469645, -1471336965, 2049178762, -192324811,
|
||||
-2056050066, 810879705, 1405046309, -781317118, 1012782311, -1045081032, 728377508, 1473511660,
|
||||
290489070, 326666761, 2018299979, -1876688058, 1239968501, 1464625040, 2025151042, -101397407,
|
||||
1387902041, 210959839, 1366359326, -476473433, 153180037, -1607631523, -506743495, 17888738,
|
||||
313865008, -340504498, 586684079, 1243699375, 753162229, -646761694, -739189655, -210120185,
|
||||
-1856358726, -628255542, -1812798197, 1416288088, 1077967722, -846846208, 1379850409, -580183344,
|
||||
-1858959, 210859778, 295841424, 1492774865, -1415543680, -344870570, -1942779197, 1549510646,
|
||||
-389544849, 314254218, 11784988, -1311757368, 1719514841, -764610517, 1296788970, -994707050,
|
||||
783854563, 422654144, 387639079, 1219688425, 2144352572, -834212874, -1036550358, 935909479,
|
||||
-568610842, 1327498837, -588933178, 1910065754, -40851599, -182063170, 1302731458, 541311559,
|
||||
-1647345522, 805224371, -1721196679, 1518507830, -952689880, -433276260, 509675254, -777259954,
|
||||
1277810106, 284054896, 936042202, 2036836351, 1956412426, -1186403024, 287795400, 2135311211,
|
||||
720485927, 1500695024, -281656583, -1277937322, -1628968482, 1242814831, -2030700974, 1473867890,
|
||||
440813549, -1357033971, 28384076, 1602731216, -641465746, -609054347, 635938444, 1472898176,
|
||||
1476894555, -747974186, -1590337055, -884242108, -389736197, -2066984505, 1087103272, -1236446290,
|
||||
31657463, 1835715432, -468439078, -2132633204, -434609235, 258308151, 1851926761, -1630139159,
|
||||
-1344617241, 1969204215, 619463174, -174392624, 207475487, -1619828078, 1327980298, -83968178,
|
||||
445951782, -1786230541, 6279288, -580982231, 1550645552, 2006533941, 275746007, 455676647,
|
||||
2019637349, 1115547704, -1313120106, -516213449, 73752461, -1382448112, 398589620, 1319888048,
|
||||
-1595572334, 1566934536, -1735685764, -1509545339, 1458173912, -549395819, -618827040, 1516624531,
|
||||
1900757187, -1454200688, 965524719, 488355065, -1869294316, -810641680, -2059428251, 1454656431,
|
||||
1329120541, -232185900, -994996943, 1855980910, -452077812, 1565630611, 759842266, 1241435187,
|
||||
-1390456063, 1946400597, -2032319771, 683667881, 905911106, 1983310786, 120010546, 526018017,
|
||||
-1946881912, 205004987, -1307250612, 2130980818, 2052864161, 189839787, 1789478047, 406168885,
|
||||
-1145186347, 8507675, 1277188815, 1492619042, 2009819675, -1627411598, -851016743, -1828234956,
|
||||
1962622506, 2140398255, 236935165, -337237772, 1263419111, 516775236, -335741025, 1391328225,
|
||||
455979249, -1457534664, -657606241, 485648133, 1762116343, 1194889600, 817834937, 321150162,
|
||||
131159182, 290277758, -1876924740, -1770401129, 1291602973, -1003642974, -1580211929, 1520422021,
|
||||
-399171579, -24315308, 453805396, -659197747, -205656847, 466526550, 1444397201, 1178091401,
|
||||
-1157268826, -602394028, -1370668795, 1614896435, 1699071659, 1864753793, 1888518358, -1721244514,
|
||||
1812776767, 668822227, -297283057, 2130183333, -1169618692, 912860240, -2028253096, 1244694278
|
||||
};
|
||||
|
||||
for (int i = 0; i < refInt.length; ++i) {
|
||||
Assert.assertEquals(refInt[i], mt.nextInt());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue