Gaussian pseudo-random numbers -- math issues
    Timothy Miller 
    gandalf at doctorTimothyMiller.com
       
    Sun Oct 26 23:14:39 EDT 2008
    
    
  
Thanks very, very much to Michael, Mark and Mark. (I hope I didn't  
miss anybody.)
This is an excellent start. I think I can take it from here.
Cheers,
Tim Miller
On Oct 22, 2008, at 6:46 PM, Mark Smith wrote:
> Timothy, the only way I could find of doing what you want is called  
> 'the polar form of the Box-Muller transformation'.
>
> Fortunately, it's not as bad as it sounds. :)
>
> I've copied an ADA implementation, and here it is:
>
> function polarBoxMuller pLength, pMean, pSdev
>    put false into useLast
>    repeat pLength
>
>       repeat
>          put ((random(101) - 1) * 0.02) - 1 into x1 -- generate a  
> random number between -1 and +1
>          put ((random(101) - 1) * 0.02) - 1 into x2
>
>          put (x1 * x1) + (x2 * x2) into w
>          if w <= 1 then exit repeat
>       end repeat
>
>       if w <> 0 then put ln(w) * -2 into w -- rev barfs if w is zero
>       if w <> 0 then put sqrt(w) / w into w -- ditto
>
>       put x1 * w into y1
>       put x2 * w into y2
>
>       put pMean + y1 * pSdev & comma after tList
>       put pMean + y2 * pSdev & comma after tList
>    end repeat
>
>    return char 1 to -2 of tList
> end polarBoxMuller
>
> This should give you a comma delimited list of (fairly) normally  
> distributed numbers.
>
> Best,
>
> Mark
>
> ps. I enjoy this sort of thing, so thanks for the question!
>
>
    
    
More information about the use-livecode
mailing list