The square of random is less uniform (derr)
July 26, 2009 Leave a comment
This is something obvious to statisticians but maybe less obvious to most programmers. I recently came across some code that essentially looks like this:
x = rand() #random number uniformly distributed between [0,1] ... x= x**n #raise x to a power
The programer was for some reason assuming that x was still uniform between [0,1]. Of course, this isn’t the case. Although the domain is still between [0,1] the numbers will now be squished down closer to 0.
It is easy to analyze this with a change of variables.
The frequency distribution Fx(x) = P(X<=x)=x
Y=x^n
Fy(y) = P(Y<=y) = P(x^n<=y) = P(X<=y^(1/n) = y^(1/n) for 0<=y<=1
The density function is the derivitive
Fp(y)= (1/n)*y^-(1/n) = 1/(s*sqrt(y))
The graphs of the distributions look like this, first the one generated by rand, then one with n=2: