[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]

    Hi,
    Here is a simple but good working randdom number generator for
    32 bit machines with a period of 2^31-2. It generates uniformally
    distributed integer  numbers in the range from 0 to 2^31-3, limits
    included. The version of type real generates uniformally distributed
    reals in the range from 0 to 1, limits included.

     VAR seed:longint;

     PROCEDURE ranset(s:longint);
     BEGIN
       seed:=s
     END;

     FUNCTION random:longint;
     CONST
       a=       16807; {This is just a lucky prime number}
       m=  2147483647; {This is 2^31-1, must be the same as in realrandom}
       q=      127773; {This is m div a}
       r=        2836; {This is m mod a}
     BEGIN
       seed:= a*(seed mod q) - r*(seed div q);
       IF seed <=0 THEN seed:=seed+m;
       random:=seed-1
     END;

     FUNCTION realrandom:real;
     CONST m=2147483647; {Must be the same as in random}
     BEGIN
       realrandom:=random/(m-2)
     END;

[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]