Merge pull request #182 from TobCar/master
Add Linear Congruential Generator
This commit is contained in:
commit
dbbc4cb642
57
Misc/LinearCongruentialGenerator.java
Normal file
57
Misc/LinearCongruentialGenerator.java
Normal file
@ -0,0 +1,57 @@
|
||||
/***
|
||||
* A pseudorandom number generator.
|
||||
*
|
||||
* @author Tobias Carryer
|
||||
* Date: October 10, 2017
|
||||
*/
|
||||
public class LinearCongruentialGenerator {
|
||||
|
||||
private double a, c, m, previousValue;
|
||||
|
||||
/***
|
||||
* These parameters are saved and used when nextNumber() is called.
|
||||
* The current timestamp in milliseconds is used as the seed.
|
||||
*
|
||||
* @param multiplier
|
||||
* @param increment
|
||||
* @param modulo The maximum number that can be generated (exclusive). A common value is 2^32.
|
||||
*/
|
||||
public LinearCongruentialGenerator( double multiplier, double increment, double modulo ) {
|
||||
this(System.currentTimeMillis(), multiplier, increment, modulo);
|
||||
}
|
||||
|
||||
/***
|
||||
* These parameters are saved and used when nextNumber() is called.
|
||||
*
|
||||
* @param seed
|
||||
* @param multiplier
|
||||
* @param increment
|
||||
* @param modulo The maximum number that can be generated (exclusive). A common value is 2^32.
|
||||
*/
|
||||
public LinearCongruentialGenerator( double seed, double multiplier, double increment, double modulo ) {
|
||||
this.previousValue = seed;
|
||||
this.a = multiplier;
|
||||
this.c = increment;
|
||||
this.m = modulo;
|
||||
}
|
||||
|
||||
/**
|
||||
* The smallest number that can be generated is zero.
|
||||
* The largest number that can be generated is modulo-1. modulo is set in the constructor.
|
||||
* @return a pseudorandom number.
|
||||
*/
|
||||
public double nextNumber() {
|
||||
previousValue = (a * previousValue + c) % m;
|
||||
return previousValue;
|
||||
}
|
||||
|
||||
public static void main( String[] args ) {
|
||||
// Show the LCG in action.
|
||||
// Decisive proof that the LCG works could be made by adding each number
|
||||
// generated to a Set while checking for duplicates.
|
||||
LinearCongruentialGenerator lcg = new LinearCongruentialGenerator(1664525, 1013904223, Math.pow(2.0, 32.0));
|
||||
for( int i = 0; i < 512; i++ ) {
|
||||
System.out.println(lcg.nextNumber());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user