Skip to content

Commit

Permalink
Merge pull request TheAlgorithms#182 from TobCar/master
Browse files Browse the repository at this point in the history
Add Linear Congruential Generator
  • Loading branch information
varunu28 authored Oct 11, 2017
2 parents 3244f5b + f6c3222 commit dbbc4cb
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions Misc/LinearCongruentialGenerator.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
}

0 comments on commit dbbc4cb

Please sign in to comment.