Assumming good_quality_int_rand() ranges [0..15] and N is 9, the mapping is 0->0, 1->1, ..., 8->8, 9->0, ..., 15->6. This shows 0 to 6 have twice of the chance of 7 and 8. This is the bias caused by the modulo operation.
In addition, >multiplication + rounding. may return N. Use trancate instead for the range [0..N). #I used float instead of double and also got N (very rare). Please be careful. -Hideki Gunnar Farnebäck: <[EMAIL PROTECTED]>: >Hideki Kato wrote: >> Gunnar Farnebäck: <[EMAIL PROTECTED]>: >>> Hideki Kato wrote: >>>> I didn't against you, Álvaro, rather I just made a caution for >>>> programmers who will use your pseudo code as is. :) >>>> >>>> First, I prefer SFMT (SIMD-oriented Fast Mersenne Twister) rather >>>> than integer pseudo random number generators in practice where the >>>> quality of play-out is important. Modern processors execute floating >>>> operations as fast as interger ones and >>>> picked = mt_rand() * (double) num_candidates; >>>> is the simplest and safe. >>> Please note that for uniformity purists this method has exactly the >>> same problem as good_quality_int_rand() % num_candidates. >> >> Mt_rand() has very good uniform distributions in [0..1) >> while >> good_quality_int_rand() % num_candidates >> doesn't disribute uniformly when num_candidates is not a power of 2, >> assuming good_quality_int_rand() ranges [0..2^32 or so) due to modulo >> operations. They are not the same, aren't they? > >Well, there's nothing magic about floating point numbers. Even a very >good uniform distribution in some interval is implemented by >distributing N discrete values over the interval as uniformly as >possible. When those N values by some mapping procedure are transformed >into a smaller range M, some of those will get at least one more hit >than some others, unless M divides N. It doesn't matter whether the >mapping procedure is an integer modulo operation or a floating point >multiplication + rounding. > >/Gunnar >_______________________________________________ >computer-go mailing list >computer-go@computer-go.org >http://www.computer-go.org/mailman/listinfo/computer-go/ -- [EMAIL PROTECTED] (Kato) _______________________________________________ computer-go mailing list computer-go@computer-go.org http://www.computer-go.org/mailman/listinfo/computer-go/