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 class Random {
00030
00031 public:
00032
00034 Random(Integer a = 16807, Integer b = 0, Integer c = 2147483647) : m_a(a), m_b(b), m_c(c) { m_x = 1; }
00035
00037 Integer lCRandom( ) {
00038 m_x = mod( m_a * m_x + m_b, m_c );
00039 Integer r = m_x;
00040 If ( r < 0 )
00041 r = -r;
00042 Return( r );
00043 }
00044
00049 Real random( Real L, Real U ) {
00050 Real r = lCRandom();
00051 r = r / Real( m_c );
00052 Return( r * ( U - L ) + L );
00053 }
00054
00059 Integer random( Integer L, Integer U ) {
00060 Real i = random( Real( L ), U + 1.0 );
00061 Return( Integer( i ) );
00062 }
00063
00067 Integer seed( Integer s ) {
00068 Integer r = m_x;
00069 m_x = s;
00070 Return( r );
00071 }
00072
00075 Integer getTime();
00076
00077 private:
00078 Const Integer m_a;
00079 Const Integer m_b;
00080 Const Integer m_c;
00081 Integer m_x;
00082
00083 # if 0
00084
00085 Integer mod( Integer j, Integer k ) {
00086 While ( j >= k ) { j = j - k; }
00087 While ( j <= -k ) { j = j + k; }
00088 Return( j );
00089 }
00090 # else
00091
00092 Integer mod( Integer j, Integer k ) {
00093 Return j % k;
00094 }
00095 #endif
00096 };
00097
00099 Integer LCRandom( );
00100
00102 Integer IRandom( Integer L, Integer U );
00103
00105 Integer SeedRandom( Integer seed );
00106
00109 Integer Time();
00110
00112 Real Random( Real L = 0.0, Real U = 1.0 );
00113
00115 Integer Random( Integer L, Integer U );
00116
00117 #endif // RANDOM_H
00118