reference
http://java.sun.com/javase/6/docs/api/java/util/Random.html#nextInt(int)
do {
bits = next(31);
val = bits % n;
} while (bits - val + (n-1) < 0);
big problem
bits>=0
n>0
n<=bits
therefore
0<=bits%n<bits
therefore bits-bits%n > 0
therefore bits-bits%n+n-1 > 0
therefore bits-bits+n-1<0 is always false?
So how can this loop ever iterate more than once as the documentation
says it can.
Patricia Shanahan - 03 Jan 2008 06:28 GMT
> reference
> http://java.sun.com/javase/6/docs/api/java/util/Random.html#nextInt(int)
[quoted text clipped - 17 lines]
> So how can this loop ever iterate more than once as the documentation
> says it can.
Java int is 2's complement signed. If (n-1) and (bits-val) are both
large enough, their sum may wrap around to negative. Think of the "< 0"
test in the Java code as meaning, in mathematical integer arithmetic, ">
Integer.MAX_VALUE".
Patricia
Roedy Green - 04 Jan 2008 03:25 GMT
>So how can this loop ever iterate more than once as the documentation
next and nextInt are quite different animals.

Signature
Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com