[comp.sys.amiga] Random number function wanted

martens@dinghy.cis.ohio-state.edu (Jeff Martens) (06/01/90)

In article <1932@mindlink.UUCP> a275@mindlink.UUCP (Travers Naran) writes:
>Does anyone have a good random number function? I used to have an old
>Transactor with a good one in it ("Starts repeatin only after a million
>cycles!") but lost the issue.

Actually, if a generator has a period of only a million, it's not good
enough for serious use.  For a good generator, and a good discussion
of pseudorandom generators in general, see Stephen K. Park and Keith
W. Miller, "Random Number Generators:  Good ones are Hard to Find,"
10/88 Communications of the ACM.
      -------------- -- --- ---
-=-
-- Jeff (martens@cis.ohio-state.edu)

Chemlawn, trademark, suburban distributor of toxic chemicals.

@utrcgw.utc.com:mark@ardnt1 (mark) (06/01/90)

on 28 May 90 02:37:51 GMT,
Travers Naran <mindlink!a275> said:
    Travers> Sender: amiga-relay-request 
                     <@utrcgw.utc.com:amiga-relay-request@udel.EDU>

    Travers> Does anyone have a good random number function? I used to 
    Travers> have an old Transactor with a good one in it ("Starts repeatin 
    Travers> only after a million cycles!") but lost the issue.
    Travers> --
    Travers> -------------------------------------------------------------------
    Travers> Travers "T'aran" Naran (I am male)
    Travers> Simon Fraser University, Computing Science
    Travers> Whovian, Prober, Treker, Quantum Leaper....
    Travers> Mailing addresses:
    Travers>    Usenet  Travers_Naran@mindlink.UUCP
    Travers> or      uunet!van-bc!rsoft!mindlink!Travers_Naran
    Travers> ------------------------------------------------------------------


Travers,

Following is a Pascal fragment showing a random-number generator
routine that can be found in the March 1987 issue of Byte (pg 127).

I've only used a few times myself, so I can't make any guarantees,
but it appears to be a good algoritm.  I can't answer specifics of 
the algorithm, so if you have any questions, get a copy of the
Byte article.

I'm posting this (rather than an Email reply) because I thought
that there might be others that are interested.

					Mark

------------------------------------------------------------------------------
| Mark Stucky                         | Email:                               |
| United Technologies Research Center |   mark%ardnt1@utrcgw.utc.com         |
| East Hartford, CT.                  |   mast%utrc@utrcgw.utc.com           |
------------------------------------------------------------------------------

	Program ...

	   var	x, y, z : integer;   { global seeds }

	Function random : real;

	   var	temp : real;

	begin

	 { first generator }

	   x := 171 * ( x mod 177 ) - 2 * ( x div 177 );

	   if x < 0 then
	      x := x + 30269;

	 { second generator }

	   y := 172 * ( y mod 176 ) - 35 * ( y div 176 );

	   if y < 0 then
	      y := y + 30307;

	 { third generator }

	   z := 170 * ( z mod 178 ) - 63 * ( z div 178 );

	   if z < 0 then
	      z := z + 30323;

	 { combine to give function value }

	   temp := x / 30269.0  +  y / 30307.0  +  z / 30323.0;

	   random := temp - trunc( temp );

	end;


	. . .


	begin

	 { Initialize seeds.  For production runs, different values
	   [between 1 and 30000] should be used each time, preferably
	   by some automatic method such as from date and time readings
	   if available. }

	   x :=     1;
	   y := 10000;
	   z :=  3000;


	   . . .

	end;