Say you have a function
rand(1,3) that returns a random number 1, 2, or 3 and it does a good job and returns each number with a 1/3 probability.
Now lets say for some reason you only need the numbers 0 or 1.
If you want to use your
rand(1,3) function you’ll have to make it do something with the number 3. As an engineer you may intuitively use the modulo operator like this:
rand(1,3) % 2 to get the following results:
When rand(1,3) returns 1 1 % 2 = 1
When rand(1,3) returns 2 2 % 2 = 0
When rand(1,3) returns 3 3 % 2 = 1
Uh oh. Suddenly number 2 has a 2/3 probability and number 1 only has a 1/3 probability. Not an even probability of each number.
That is modulo bias.
The more generalized rule for our example is that for
rand(1,a) % n n must be divisible into a with a remainder of zero or else there is a possibility of modulo bias. Put differently a mod n should = 0.
Here are other examples:
100 mod 50 = 0 rand(1,100) % 50 // even probability of each number
100 mod 52 = 48 rand(1,100) % 52 // not even probability of each number
You may be thinking that you’d never do this but imagine writing some code to pick a “random” one of 52 playing cards. It’s not unimaginable that you might write it with bias if you didn’t know better.
I would love to play at that casino.Posted