Go to the documentation of this file.00001
00002 #ifndef RANDOM_H
00003 #define RANDOM_H
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "Aliases.h"
00019
00023
00024
00029
00030 const Integer Musimat_Random_Seed = 2147483647;
00031
00032 class Random {
00033
00034 public:
00035
00037 Random(Integer a = 16807, Integer b = 0, Integer c = Musimat_Random_Seed) : m_a(a), m_b(b), m_c(c) { m_x = 1; }
00038
00040 Integer lCRandom( ) {
00041 m_x = mod( m_a * m_x + m_b, m_c );
00042 Integer r = m_x;
00043 If ( r < 0 )
00044 r = -r;
00045 Return( r );
00046 }
00047
00052 Real random( Real L, Real U ) {
00053 Real r = lCRandom();
00054 r = r / Real( m_c );
00055 Return( r * ( U - L ) + L );
00056 }
00057
00062 Integer random( Integer L, Integer U ) {
00063 Real i = random( Real( L ), U + 1.0 );
00064 Return( Integer( i ) );
00065 }
00066
00070 Integer seed( Integer s ) {
00071 Integer r = m_x;
00072 m_x = s;
00073 Return( r );
00074 }
00075
00078 Integer getTime();
00079
00080 private:
00081 Const Integer m_a;
00082 Const Integer m_b;
00083 Const Integer m_c;
00084 Integer m_x;
00085
00086 # if 0
00087
00088 Integer mod( Integer j, Integer k ) {
00089 While ( j >= k ) { j = j - k; }
00090 While ( j <= -k ) { j = j + k; }
00091 Return( j );
00092 }
00093 # else
00094
00095 Integer mod( Integer j, Integer k ) {
00096 Return j % k;
00097 }
00098 #endif
00099 };
00100
00102 Integer LCRandom( );
00103
00105 Integer IRandom( Integer L, Integer U );
00106
00108 Integer SeedRandom( Integer seed );
00109
00112 Integer Time();
00113
00115 Real Random( Real L = 0.0, Real U = 1.0 );
00116
00118 Integer Random( Integer L, Integer U );
00119
00120 #endif // RANDOM_H
00121