package org.jgap.util;

/**
    Implementation of a randomX-compliant class using the
    simple (and not very good) rand() linear congruential
    generator given as an example in the ANSI C specification.  This
    is intended not for serious use, merely as an illustration of a
    simple software-based randomX generator.

    

The generation algorithm is:

Ij+1 = (Ijx1103515245+12345) & 0x7FFFFFFF

Designed and implemented in July 1996 by John Walker, kelvin@fourmilab.ch. */ public class randomLCG extends randomX { long state; // Constructors /** Creates a new pseudorandom number generator, seeded from the current time. */ public randomLCG() { this.setSeed(System.currentTimeMillis()); } /** Creates a new pseudorandom number generator with a specified seed. @param seed initial seed for the generator */ public randomLCG(long seed) { this.setSeed(seed); } // Seed access /** Set seed for generator. Subsequent values will be based on the given seed. @param seed seed for the generator */ public void setSeed(long seed) { super.setSeed(); // Notify parent seed has changed state = seed & 0xFFFFFFFFL; } /** Get next byte from generator. Given how poor this generator is, it's wise to make a separate call for each byte rather than extract fields from a single call, which may be correlated. Also, the higher-order bits of this generator are more random than the low, so we extract the byte after discarding the low-order 11 bits. @return the next byte from the generator. */ public byte nextByte() { state = (state * 1103515245L + 12345L) & 0x7FFFFFFFL; return (byte) ((state >> 11) & 0xFF); } };

Ads help maintain this website.