Functions | Variables

/Users/garethloy/Musimathics/Musimat1.2/MusimatChapter9/C090703a.cpp File Reference

#include "MusimatChapter9.h"

Go to the source code of this file.

Functions

 MusimatChapter9Section (C090703a)
Integer lcRandom ()
Void seedRandom (Integer s)
Static Void para1 ()

Variables

Integer lc_x

Function Documentation

Integer lcRandom (  )

Definition at line 55 of file C090703.cpp.

References lc_a, lc_b, lc_c, and lc_x.

                  {
        lc_x = Mod(lc_a * lc_x + lc_b, lc_c);   // update x based on its previous value
        Integer r = lc_x;                                               // x may be positive or negative
        If (r < 0)                                                              // force the result to be positive
                r = -r;
        Return(r);
}
MusimatChapter9Section ( C090703a   )

Definition at line 2 of file C090703a.cpp.

References para1().

                                 {
        Print("*** Seeding the Random Number Generator ***");
        /*****************************************************************************
         Seeding the Random Number Generator
         
         Unlike the natural sources of randomness, LCRandom() will always produce the 
         same sequence with the same initial parameters. 
         
         Different sets of pseudorandom 
         sequences can be generated by varying the initial value of x, as with the 
         SeedRandom() function defined below.
         *****************************************************************************/
        para1(); // Step into this function to continue.
}
Static Void para1 (  )

Definition at line 31 of file C090703a.cpp.

References lcRandom(), and seedRandom().

                    {
        /*****************************************************************************
         Below is an example of generating random numbers from a seed value of 100,
         resetting the seed to 100, and generating the same three random numbers.
         Repeatability is why this is called a pseudorandom number generator.
         *****************************************************************************/
        
        Print("*** Three random numbers based on seed 100 ***");
        seedRandom( 100 );
        For (Integer i = 0; i < 3; i++ ) {
                Print( lcRandom() );
        }
        Print("Same three random numbers after resetting the seed to 100:");
        seedRandom( 100 );
        For (Integer i = 0; i < 3; i++ ) {
                Print( lcRandom() );
        }
        
        /*****************************************************************************
         The seedRandom() function allows us to set the initial value of x. If we initialize x to a 
         parameter such as the current time in seconds from some fixed moment, then we 
         start at a different place in the pseudorandom cycle each time (although, of 
         course, this is finite, too, because the sequence length is necessarily limited).
         *****************************************************************************/
        
        Print("LCRandom seeded with current time in seconds:");
        seedRandom( Time() );
        For (Integer i = 0; i < 3; i++ ) {
                Print( lcRandom() );
        }
        
        /*****************************************************************************
         The linear congruential method is simple and efficient, but it is hardly the 
         best source of random values. Even ignoring the fact that it repeats, its 
         uniformity is not wonderful. Knuth (1973, vol. 2) cautioned, "Random number 
         generators should not be chosen at random." For superior techniques, see 
         Press et al. (1988, 210). However, this method is very simple to implement 
         and has the advantage over natural random processes of providing the same 
         pseudorandom sequence if seeded with the same values.
         *****************************************************************************/
}
Void seedRandom ( Integer  s )

Definition at line 27 of file C090703a.cpp.

References lc_x.

                           { 
        lc_x = s; // set global variable lc_x to seed s
}

Variable Documentation

Integer lc_x

Definition at line 53 of file C090703.cpp.