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!
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution