🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.lang.modula2
Article #1420

Re: RND Function Needed

#1420
From: Eric Iverson
Date: Tue, 27 Nov 1990 08:01
92 lines
2588 bytes
Just in case anyone cares, this is the random number generator Ted
Dunning hacked out today:

IMPLEMENTATION MODULE Rand;
(* 7^5 is a reasonable linear congruential generator for 32 bit 
   arithmetic, longs should be at least that long, see cacm october
   or november 1988 *)

FROM Clock IMPORT (* Type *) SystemTime,
                  (* Procedure *) GetSystemTime;
FROM MathLib IMPORT Entier;

TYPE
    LONGSEED = ARRAY[0..55] OF LONGINT;

VAR
    Seed : LONGSEED;
    Next : INTEGER;

PROCEDURE SetSeed ( );
VAR
    I : INTEGER;
    N : LONGINT;
    S : SystemTime;

BEGIN (* SetSeed *)
    GetSystemTime(S);
    N := S.seconds + S.microSeconds;
    FOR I := 0 TO 55 DO
        Seed[I] := N;
        N := 7*N;
        N := 7*N;
        N := 7*N;
        N := 7*N;
        N := 7*N;
        IF ( N < 0 ) THEN
            N := -N;
        END (* IF *);
        IF ( N < 0 ) THEN
            N := 0;
        END;
    END (* FOR *);

    Next := 0;
END SetSeed;

PROCEDURE Random ( ):REAL;
VAR
    K: INTEGER;

BEGIN
    K := Next-24;
    IF ( K < 0 ) THEN
        K := K+56;
    END (* IF *);
    Seed[Next] := Seed[Next] + Seed[K];

    K := Next-55;
    IF ( K < 0 ) THEN
        K := K+56;
    END (* IF *);
    Seed[Next] := Seed[Next] + Seed[K];
    
    K := Next;
    Next := Next+1;
    IF ( Next >= 56 ) THEN
        Next := 0;
    END (* IF *);
    
    IF ( Seed[K] < 0 ) THEN
        Seed[K] := -Seed[K];
    END (* IF *);
    IF ( Seed[K] < 0 ) THEN
        Seed[K] := 0;
    END;

    RETURN FLOAT(Seed[K])/2147483647.0;
END Random;

BEGIN (* Rand *)
    SetSeed;
END Rand.
--
------------------------------------------------------------------------
Eric Iverson				Internet: eiverson@nmsu.edu
Computing Research Lab
Box 30001/3CRL				Life is something to do when
New Mexico State University		you can't get to sleep.
Las Cruces, NM 88003-0001			-Fran Lebowitz
VOICE: (505) 646-5711	
FAX:   (505) 646-6218
Technical Details
Message-ID: <EIVERSON.90Nov27010159@aigyptos.nmsu.edu>
Path: arc1-ca.pugleaf.net!utzoo!censor!geac!torsqnt!news-server.csri.toronto.edu!cs.utexas.edu!swrinde!zaphod.mps.ohio-state.edu!maverick.ksu.ksu.edu!unmvax!ariel.unm.edu!nmsu!opus!eiverson
References: <1484.2750D9EC@puddle.fidonet.org>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!censor!geac!torsqnt!news-server.csri.toronto.edu!cs.utexas.edu!swrinde!zaphod.mps.ohio-state.edu!maverick.ksu.ksu.edu!unmvax!ariel.unm.edu!nmsu!opus!eiverson
From: eiverson@nmsu.edu (Eric Iverson)
Newsgroups: comp.lang.modula2
Subject: Re: RND Function Needed
Message-ID: <EIVERSON.90Nov27010159@aigyptos.nmsu.edu>
Date: 27 Nov 90 08:01:59 GMT
References: <1484.2750D9EC@puddle.fidonet.org>
Sender: news@NMSU.Edu
Organization: Computing Research Lab
Lines: 92
In-reply-to: Jon.Guthrie@p15.f20.n226.z1.fidonet.org's message of 24 Nov 90 17:37:39 GMT