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

    ===========================================================================
     BBS: Canada Remote Systems
    Date: 06-18-93 (23:27)             Number: 26893
    From: KENT BRIGGS                  Refer#: NONE
      To: BRIAN PAPE                    Recvd: NO
    Subj: RANDOM NUMBERS                 Conf: (1221) F-PASCAL
    ---------------------------------------------------------------------------
     -=> Quoting Brian Pape to Erik Johnson <=-

     BP> Please- I *am* looking for the source code to a decent random number
     BP> generator so that I'm not dependant on Borland.

     Brian, Borland did change their random:word function when they released
     7.0.  However the random:real function, the randomize procedure, and their
     method of updating randseed remain the same as ver 6.0.  Using DJ Murdoch's
     CycleRandseed procedure and reverse engineering TP6's and TP7's Random
     functions, I came up with the following routines:

    const rseed: longint = 0;

    procedure randomize67;      {TP 6.0 & 7.0 seed generator}
    begin
      reg.ah:=$2c;
      msdos(reg);    {get time: ch=hour,cl=min,dh=sec,dl=sec/100}
      rseed:=reg.dx;
      rseed:=(rseed shl 16) or reg.cx;
    end;

    function rand_word6(x: word): word;    {TP 6.0 RNG: word}
    begin
      rseed:=rseed*134775813+1;
      rand_word6:=(rseed shr 16) mod x;
    end;

    function rand_word7(x: word): word;    {TP 7.0 RNG: word}
    begin
      rseed:=rseed*134775813+1;
      rand_word7:=((rseed shr 16)*x+((rseed and $ffff)*x shr 16)) shr 16;
    end;

    function rand_real67: real;    {TP 6.0 & 7.0 RNG: real}
    begin
      rseed:=rseed*134775813+1;
      if rseed<0 then rand_real67:=rseed/4294967296.0+1.0 else
      rand_real67:=rseed/4294967296.0;
    end;

    If anyone can improve on these please post some code here, thanks.

    ___ Blue Wave/QWK v2.12
    --- Renegade v06-11 Beta

     * Origin: Snipe's Castle BBS, Waco TX   (817)-757-0169 (1:388/26)

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