org.jscience.measure.random
Class MarsagliaGenerator

java.lang.Object
  extended by org.jscience.measure.random.RandomElement
      extended by org.jscience.measure.random.RandomSeedable
          extended by org.jscience.measure.random.MarsagliaGenerator
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, RandomGenerator

public class MarsagliaGenerator
extends RandomSeedable
implements java.io.Serializable

RANMAR is a lagged Fibonacci generator proposed by Marsaglia and Zaman and is a good research grade generator. This version of RANMAR is based on the paper by James, which is a good reference for the properties of RANMAR and several other generators.


REFERENCES:
F. James, Comp. Phys. Comm. 60 (1990) p 329-344
and was originally described in
G. Marsaglia, A. Zaman and W.-W Tsang, Stat. Prob. Lett 9 (1990) p 35.

Source code is available.

See Also:
Serialized Form

Field Summary
static int BIG_PRIME
          The 46,009,220nd prime number, he largest prime less than 9*108.
static int DEFSEED
          Default seed.
 
Constructor Summary
MarsagliaGenerator()
          Initialize Ranmar with a default seed taken from Marsaglia and Zaman's paper.
MarsagliaGenerator(java.util.Date d)
          Seed RANMAR from the clock.
MarsagliaGenerator(int ijkl)
          Initialize Ranmar with a specified integer seed
MarsagliaGenerator(long ijkl)
          Initialize Ranmar with a specified long seed
 
Method Summary
 double nextDouble()
          The generator
 void nextDouble(double[] d, int n)
          A version of the generator for filling arrays, inlined for speed
 
Methods inherited from class org.jscience.measure.random.RandomSeedable
ClockSeed, ClockSeed
 
Methods inherited from class org.jscience.measure.random.RandomElement
choose, choose, clone, coin, coin, gaussian, gaussian, nextDouble, powlaw, uniform
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFSEED

public static int DEFSEED
Default seed. DEFSEED=54217137


BIG_PRIME

public static int BIG_PRIME
The 46,009,220nd prime number, he largest prime less than 9*108. Used as a modulus because this version of RANMAR needs a seed between 0 and 9*108 and BIG_PRIME isn't commensurate with any regular period. BIG_PRIME= 899999963

Constructor Detail

MarsagliaGenerator

public MarsagliaGenerator(int ijkl)
Initialize Ranmar with a specified integer seed

Parameters:
ijkl - seed integer; Ranmar(int ijkl) takes uses ijkl modulus BIG_PRIME as a seed for RANMAR.

MarsagliaGenerator

public MarsagliaGenerator(long ijkl)
Initialize Ranmar with a specified long seed

Parameters:
ijkl - seed long; Ranmar(long ijkl) takes uses ijkl modulus BIG_PRIME as a seed for RANMAR.

MarsagliaGenerator

public MarsagliaGenerator()
Initialize Ranmar with a default seed taken from Marsaglia and Zaman's paper. Equivalent to Ranmar(54217137).


MarsagliaGenerator

public MarsagliaGenerator(java.util.Date d)
Seed RANMAR from the clock.

 RandomElement e=new Ranmar(new Date());
 

Parameters:
d - a Date object to seed Ranmar with, typically new Date()
Method Detail

nextDouble

public final double nextDouble()
The generator

Specified by:
nextDouble in interface RandomGenerator
Returns:
a pseudo random number

nextDouble

public final void nextDouble(double[] d,
                             int n)
A version of the generator for filling arrays, inlined for speed

Overrides:
nextDouble in class RandomElement
Parameters:
d - an array of doubles to be filled
n - size of the array