[Coco] Is the RND command really generating a random number?

Salvador Garcia salvadorgarciav at yahoo.com
Fri May 19 13:01:14 EDT 2017


I've used rnd() in other dialects of BASIC and find their syntax incompatible. In some cases, the parameter is ignored. In other, there is a specific statement used to randomize the sequence. Still, the generation of random number is an interesting process. Salvador


      From: Johann Klasek <johann+coco at klasek.at>
 To: CoCoList for Color Computer Enthusiasts <coco at maltedmedia.com> 
 Sent: Friday, May 19, 2017 10:51 AM
 Subject: Re: [Coco] Is the RND command really generating a random number?
   
On Thu, May 18, 2017 at 09:05:25PM -0400, Glen Hewlett wrote:
[..]
> Remember to use A=RND(-TIMER) at the beginning of your program to generate a different random seed each time the computer is turned on.

Nice reading: 
http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=8&t=596
http://www.vavasour.ca/cfdm/issue27.htm#article20

Taken from the ECB's ROM code on a Dragon $9772 depending on the parameter
given

        <0 ... seed with parameter 
                action: parameter * constant1 + constant2 -> RND storage, FAC
                
        =0 ... next pseudorandom value  
                action: RND storage * constant1 + constant2-> RND storage, FAC
              
        >0 ... next pseudorandom scaled from 1 to N
                action: INT( INT(parameter) * ( RND storage * constant1 + constant2 -> RND storage ) + 1 ) -> FAC


Just to compare it to other MS BASIC implementations, especially CBM
BASIC: parameter >0 does no scaling, instead it mangles some hardware
dependend values (timer counter value, ...) into the result. This is not
good enough to get a stable and good distribution, only practical for
seeding the generator.



-- 
Coco mailing list
Coco at maltedmedia.com
https://pairlist5.pair.net/mailman/listinfo/coco


   


More information about the Coco mailing list