edu.cornell.lassp.houle.RngPack.RandomSeedable Maven / Gradle / Ivy
package edu.cornell.lassp.houle.RngPack;
import java.util.*;
//
// RngPack 1.1a by Paul Houle
// http://www.honeylocust.com/~houle/RngPack/
//
/**
*
* RandomSeedable
is an abstract class that extends the
* RandomElement
class to include the ability to
* automatically generate a valid long
seed from the clock.
* Thus it provides a consistent interface for seeding interchangable
* generators. It is reccomended that a RandomSeedable
have
* a constructor that takes a long
for a seed. For example,
* if you write a generator called ReallyRandom
, you want
* to be able to do
*
*
* long seed=ReallyRandom.ClockSeed();
* RandomSeedable e=new ReallyRandom(seed);
*
*
* this makes it convenient to keep a copy of the seed in case you want
* to restart the generator with the same seed some time in the future.
*
*
* If one is going to use a long to generate a smaller seed by taking
* Clockseed()
modulus another number, we reccomend that
* you use a prime number; this ensures that the generator would have
* the maximum "period" if it were started at regular issues, for
* instance, by a batch job. See Ranmar
for an
* example.
*
*
*
* Source code is available.
*
* @author Paul Houle (E-mail: [email protected])
* @version 1.1a
*
* @see Ranecu
* @see Ranlux
* @see Ranmar
*/
public abstract class RandomSeedable extends RandomElement {
/**
*
* Return a long integer seed given a date
*
* @param d a date
* @return a long integer seed
*
*/
public static long ClockSeed(Date d)
{
return d.getTime();
};
/**
*
* Return a long integer seed calculated from the date. Equivalent to
* ClockSeed(new Date());
*
* @return a long integer seed
*
*/
public static long ClockSeed()
{
return ClockSeed(new Date());
};
};