So, I'm studying J2ME, and for some reason (maybe the wrong version of CLDC?) I can't use random.getNext(n). I can't specify the range of the random number. What a pain.
I wanted to avoid doing floating point math, and fell back on a C trick. To get a random number from 0 to 500:
import java.util.Random; Random r = new Random(); int myNum; myNum = ((r.getNext() & 0xffff) * 500 ) >> 16;
r.getNext() returns a random int, which is 32 bits.
& 0xffff masks off the upper 16 bits, leaving 16 lower bits of randomness.
So our range of random numbers is 0 to 65535. We multiply this by our desired range.
>> 16 shifts the bits to the right. >> 16 is equivalent to dividing by 65535.
So, what this calculates is int((random_smallint / 65536) * range).
The trick is that we don't do any divisions, and we only multiply once, so it's probably faster.
Attachment | Size |
---|---|
Picture 005.jpg | 14.66 KB |