Forums Register Login

Weird Random Number Failure

+Pie Number of slices to send: Send
So I'm trying to generate a random long, preferably in the full range between Long.MIN_VALUE and Long.MAX_VALUE. My first (very naive) attempt was "Long.MIN_VALUE + (long) (Math.Random() * (Long.MAX_VALUE - Long.MIN_VALUE + 1));", obviously this didn't work because the calculation overflowed. I eventually got lazy and decided to just use the positive numbers, so I tried "(long) Math.Random()*(Long.MAX_VALUE);" but for some reason this always returns 0. I'd really like to know why this doesn't work and I'd appreciate any ideas on how to accomplish my goal. I thought about using a BigInteger, but this code needs to be speedy. Thanks for your help.
+Pie Number of slices to send: Send
(long) Math.Random()*(Long.MAX_VALUE) will always return 0, because you first cast the Math.Random() to long, which strips off decimal digits from it and therefore always results in zero.

Have a look at the java.util.Random class. It can probably give you all you need.
+Pie Number of slices to send: Send
Agree the java.util.Random class’ method is a better solution, but you can sort out that multiplication and cast if you remember that cast has a higher precedence than * and add one pair of () appropriately.
+Pie Number of slices to send: Send
Wow, I can't believe I didn't see that. I guess that's what you get for coding in the middle of the night. Thanks guys
+Pie Number of slices to send: Send
You’re welcome
I can't take it! You are too smart for me! Here is the tiny ad:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com


reply
reply
This thread has been viewed 707 times.
Similar Threads
Locking can't be that simple
Generate Cookie Value
B&S Is it OK To Generate The long Value For The Lock in "lockRecord()" Randomly?
Infinite for loop
how to get the oldest timestamp record in an array list
More...

All times above are in ranch (not your local) time.
The current ranch time is
Apr 16, 2024 04:18:18.