**[**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**]**