This wiki is out of date, use the continuation of this wiki instead

Rand

From FenixWiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 03:04, 10 January 2008 (edit)
Sandman (Talk | contribs)
m
← Previous diff
Revision as of 03:42, 10 January 2008 (edit) (undo)
Sandman (Talk | contribs)

Next diff →
Line 21: Line 21:
== Notes == == Notes ==
To synchronize rand() on different computers, the function [[rand_seed]]() can be used. To synchronize rand() on different computers, the function [[rand_seed]]() can be used.
 +
 +Rand() is not a very good function on itself. To counter this, the following ''rand2()'' can be used:
 +<pre>
 +#define RAND_MAX 32767
 +#define DRAND_RANGE (1.0/((RAND_MAX + 1)*(RAND_MAX + 1)))
 +#define irand(x) ((unsigned int) ((x) * drand ()))
 +Function float drand ()
 +Private
 + float f;
 +Begin
 + Repeat
 + f = (rand (0,RAND_MAX) * (RAND_MAX + 1.0)
 + + rand (0,RAND_MAX)) * DRAND_RANGE;
 + Until (f < 1); /* Round off */
 + return f;
 +End
 +Function int rand2(int lowerlimit, int upperlimit)
 +Begin
 + return (lowerlimit+irand(upperlimit-lowerlimit+1));
 +End
 +</pre>
 +To understand this code, one can read [http://www.azillionmonkeys.com/qed/random.html its source].

Revision as of 03:42, 10 January 2008


Contents

Definition

INT rand ( <INT lowerlimit> , <INT upperlimit> )

Returns a random number, ranging from a certain lower limit to a certain upper limit. The limits are within the range.

Make sure the difference between lowerlimit and upperlimit does not exceed 32767 (2^15).

Parameters

INT lowerlimit - The lower limit for the random value.
INT upperlimit - The upper limit for the random value.

Returns

INT : A random value: lowerlimit <= result <= upperlimit

Notes

To synchronize rand() on different computers, the function rand_seed() can be used.

Rand() is not a very good function on itself. To counter this, the following rand2() can be used:

#define RAND_MAX 32767
#define DRAND_RANGE (1.0/((RAND_MAX + 1)*(RAND_MAX + 1)))
#define irand(x) ((unsigned int) ((x) * drand ()))
Function float drand ()
Private
    float f;
Begin
    Repeat
       f = (rand (0,RAND_MAX) * (RAND_MAX + 1.0)
          + rand (0,RAND_MAX)) * DRAND_RANGE;
    Until (f < 1); /* Round off */
    return f;
End
Function int rand2(int lowerlimit, int upperlimit)
Begin
    return (lowerlimit+irand(upperlimit-lowerlimit+1));
End

To understand this code, one can read its source.

Personal tools