3 ms·
Third error: This is not the correct way to randomly pick a number in a set range. The proper way is actually quite complicated. Imagine you do (int) (Math.rand
by ZoFreX 16y ago
Third error: This is not the correct way to randomly pick a number in a set range. The proper way is actually quite complicated. Imagine you do (int) (Math.random() * 10), this could give you numbers from 0 to 10. However, you only get 0 if Math.random() * 10 is less than 0.5, but you get 1 if the value is between 0.5 and 1.5. You are half as likely to see a zero!
I can't speak for Python, but in Java it's quite simple to do it right; Random#nextInt(int) "Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive)" (also consider using SecureRandom).
- calpaterson 16y agoI actually struggle to understand why people even use Math.random() when the Random class exists.
- Dilpil 16y agoAlot of people probably look for Random but find Math.random().
- nostrademons 16y agoDon't need an import for Math.random(). Random is in java.util, while Math is in java.lang.
- anonymoushn 16y agopublic class example { public static void main(String[] JAVA_LOL) throws Throwable { // prints "6" System.out.println((int)6.99999); } }
- ZoFreX 16y agoYou (and everyone else) are of course right. I remembered the wrong thing, what I said doesn't apply to that method in Java. What does apply is that there are lots of subtleties in generating random numbers, and there's rarely a reason to re-invent the wheel. There's a good example of how subtle pseudorandomness is in the Java documentation, so I will link that instead of embarrassing myself further: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextDouble() http://download.oracle.com/javase/1.4.2/docs/api/java/util/R...
- thedufer 16y agoWe're all aware that casting to an integer does truncation, not rounding. Right?
- GVRV 16y agoAt least in Java and other languages, when casting as int truncates, and doesn't round the number, so: ((int) (0.9999999)) == 0 But then there's Math.floor and Math.ceil for what you're describing which can be used as well.
- MBlume 16y agoimport random # will print an integer between 0 and 10 inclusive print randint(0,10)
- llimllib 16y ago> I can't speak for Python, but in Java it's quite simple to do it right http://docs.python.org/library/random.html#random.randint http://docs.python.org/library/random.html#random.randint
- streety 16y agoActually the python equivalent of "Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive)" would be random.randrange(0, n, 1) random.randint(a, b) returns a uniformly distributed int value between a (inclusive) and b (inclusive). </nitpick>
- dangoldin 16y agoIn that case you can always use floor or ceil.
- deleted 16y ago[deleted]