Can someone explain why (int) (Math.random()*12-3) returns values between -2 and 8 while (int) (Math.random()*12)-3 returns between -3 and 8?
The difference is the placement of a parenthesis, but I don't know the "under the hood" reason why it makes a difference. If the lowest value that Math.random() can return is 0, that 0*12 = 0 and both should end up with -3 as a minimum.
I assume it has to do with casting to an int and 0.x to 1. Is it just that it is (theoretically) impossible to hit 0.00000000...?
The first one can return -3, it is just very unlikely.
Math.random():
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
So when you have (int) (Math.random()*12-3), inside the inner parentheses, the result will be a double, which you cast to an int. This truncates the decimal places, so unless Math.random() * 12 returns exactly 0 (And then once you subtract 3 to get exactly -3), Math.random() * 12 -3, will return at the lowest 2.{...}, and it will get truncated to -2.
When you do:
(int) (Math.random()*12)-3
The casting is of greater precedence than the subtraction, so it is greater likelihood to get truncated to 0. Then you subtract three, which results in -3.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With