Mail Archives: djgpp/2007/09/07/21:00:23
On Wed, 5 Sep 2007 11:34:39 -0400 in comp.os.msdos.djgpp, DJ Delorie
<dj AT delorie DOT com> wrote:
>
>> Well, okay - random() doesn't anything like guarantee
>> equidistribution. But that said, wouldn't scaling the result set
>> at least not give you anything *worse* than what you started with?
>
>If you do the math, you see that there are 47 numbers left over when
>you mod MAX_INT % 50. That means the last three numbers (47, 48, 49)
>are slightly less likely to be chosen. The difference in probability?
>1 in 42,949,672 (0.9999999767169356).
>
>So, for a range this small, it really doesn't matter, and if it *does*
>matter, you probably already know more about random number generation
>than any of us here.
>
>However, integer modulus is a LOT cheaper than floating point
>division.
IIRC the best distributed approach is to take a sufficient number of
bits b around the middle of the random integer, shift right to give you
a set 0..2^b-1 and if the number is bigger than you can use, try again
with a new random integer.
--
Thanks. Take care, Brian Inglis Calgary, Alberta, Canada
Brian DOT Inglis AT CSi DOT com (Brian[dot]Inglis{at}SystematicSW[dot]ab[dot]ca)
fake address use address above to reply
- Raw text -