[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

On Sat, 02 Jun 2018 21:02:14 +1000, Chris Angelico wrote: > Point of curiosity: Why "> 0.5"? No particular reason, I just happened to hit that key and then copied and pasted the line into the next one. > Normally when I want a fractional > chance, I write the comparison the other way: "random.random() < 0.5" > has exactly a 50% chance of occurring (presuming that random.random() > follows its correct documented distribution). I've no idea what the > probability of random.random() returning exactly 0.5 is Neither do I. But I expect that "exactly 50% chance" is only approximately true :-) My understanding is that given the assumption of uniformity, the 50% chance is mathematically true, but in that case, it makes no difference whether you go from 0 to 0.5 or 0.5 to 1.0. Mathematically it makes no difference whether you include or exclude the end points. In the Real numbers, there's an uncountable infinity of points either way. *But* once you move to actual floats, that's no longer true. There are a great many more floats between 0 and 0.5 than between 0.5 and 1.0. Including the end points, if we enumerate the floats we get: 0.0 --> 0 0.5 --> 4602678819172646912 1.0 --> 4607182418800017408 so clearly the results of random.random() cannot be uniformly distributed over the individual floats. If they were, the probably of getting something less than or equal to 0.5 would be 4602678819172646912 / 4607182418800017407 or a little more than 99.9%. So given that our mathematically pure(ish) probability of 0.5 for the reals has to be mapped in some way to a finite number of floats, I wouldn't want to categorically say that that the probability remains *precisely* one half. But if it were (let's say) 1 ULP greater or less than one half, would we even know? 0.5 - 1 ULP = 0.49999999999999994 0.5 + 1 ULP = 0.5000000000000001 I would love to see the statistical experiment that could distinguish those two probabilities from exactly 1/2 to even a 90% confidence level :-) > but since it > can return 0.0 and cannot return 1.0, I've just always used less-than. > (Also because it works nicely with other values - there's a 30% chance > that random.random() is less than 0.3, etc.) Is there a reason for going > greater-than, or is it simply that it doesn't matter? No, no particular reason. If I had thought about it I would have used < too, but I didn't. -- Steven D'Aprano "Ever since I learned about confirmation bias, I've been seeing it everywhere." -- Jon Ronson

- Prev by Date:
**Why exception from os.path.exists()?** - Next by Date:
**Sorting NaNs** - Previous by thread:
**Sorting NaNs** - Next by thread:
**Sorting NaNs** - Index(es):