I was aware that the Random function call gets evaluated in Python (and C) every time the loop iterates, I just couldn't imagine the probability distribution myself, I had assumed that all numbers are uniformally distributed but didn't cater for the sums. You're a legend! Now I see it. I wrote the following code to check out your argument and it checks out indeed :thumbs-up:
def p(n):
total = 1
for i in range(1, n):
total *= (100-i)/100
return total
for i in range(1, 100):
print(f"p({i}) = {p(i)}")
the about 44% that makes it to 13 also will make it to 1000, and the mean value will be a bit more than 442.77496045533604 (the contribution of that 44.2%)
If, on the other hand, it were to continue
p(13) = 0.44277496045533604
p(14) = 0.0
No result would be higher than 13, and the mean would be lower than 12.
Comments
I was aware that the Random function call gets evaluated in Python (and C) every time the loop iterates, I just couldn't imagine the probability distribution myself, I had assumed that all numbers are uniformally distributed but didn't cater for the sums. You're a legend! Now I see it. I wrote the following code to check out your argument and it checks out indeed :thumbs-up:
The first 13 results: p(12) sits at 50%, of course it will be the mean! :DTechnically, “the mean is 12” does not follow at all from “p(12) sits at 50%”.
“p(12) sits at 50%” implies the median (https://en.wikipedia.org/wiki/Median) is 12, and that can differ from the mean (https://en.wikipedia.org/wiki/Arithmetic_mean) of the distribution, and the difference can be quite large.
For example, if that list were to continue
the about 44% that makes it to 13 also will make it to 1000, and the mean value will be a bit more than 442.77496045533604 (the contribution of that 44.2%)If, on the other hand, it were to continue
No result would be higher than 13, and the mean would be lower than 12.