ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/utils.C
(Generate patch)

Comparing deliantra/server/common/utils.C (file contents):
Revision 1.48 by root, Thu Feb 15 18:09:33 2007 UTC vs.
Revision 1.49 by root, Sat Apr 21 22:57:15 2007 UTC

42rand_gen rndm; 42rand_gen rndm;
43 43
44void 44void
45tausworthe_random_generator::seed (uint32_t seed) 45tausworthe_random_generator::seed (uint32_t seed)
46{ 46{
47 state [0] = max ( 2U, seed * 69069U); 47 state [0] = seed * 69069U; if (state [0] < 2U) state [0] += 2U;
48 state [1] = max ( 8U, state [0] * 69069U); 48 state [1] = state [0] * 69069U; if (state [0] < 8U) state [0] += 8U;
49 state [2] = max ( 16U, state [1] * 69069U); 49 state [2] = state [1] * 69069U; if (state [0] < 16U) state [0] += 16U;
50 state [3] = max (128U, state [2] * 69069U); 50 state [3] = state [2] * 69069U; if (state [0] < 128) state [0] += 128U;
51 51
52 for (int i = 11; --i; ) 52 for (int i = 11; --i; )
53 operator ()(); 53 operator ()();
54} 54}
55 55
65} 65}
66 66
67uint32_t 67uint32_t
68tausworthe_random_generator::get_range (uint32_t r_max) 68tausworthe_random_generator::get_range (uint32_t r_max)
69{ 69{
70 return next () % r_max; 70 return (next () * (uint64_t)r_max) >> 32U;
71} 71}
72 72
73// return a number within (min .. max) 73// return a number within (min .. max)
74int 74int
75tausworthe_random_generator::get_range (int r_min, int r_max) 75tausworthe_random_generator::get_range (int r_min, int r_max)
76{ 76{
77 return r_min + (*this) (max (r_max - r_min + 1, 1)); 77 return r_min + get_range (max (r_max - r_min + 1, 1));
78} 78}
79 79
80/* 80/*
81 * The random functions here take luck into account when rolling random 81 * The random functions here take luck into account when rolling random
82 * dice or numbers. This function has less of an impact the larger the 82 * dice or numbers. This function has less of an impact the larger the

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines