http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt%28int%29说:
该算法有点棘手.它拒绝会导致分布不均匀的值(由于2 ^ 31不能被n整除).值被拒绝的概率取决于n.最坏的情况是n = 2 ^ 30 + 1,其中拒绝的概率是1/2,并且循环终止之前的预期迭代次数是2.
算法:
int bits, val;
do {
bits = next(31);
val = bits % n;
} while (bits - val + (n-1) < 0);
Run Code Online (Sandbox Code Playgroud)
代码测试的情况在哪里n > 2^30和bits > n.然后设置最高有效位并将条件中的结果转换为负值.
我知道bits最多2^31-1=>有50%的概率.的bits可以是<2 ^ 30或2和2之间^ 30 ^ 31
无论如何,
我猜一些二元分裂法术,一个破坏均匀分布的溢出?
谢谢!