random: adding lognormal, exponential, weibull, pareto, gauss, and beta distributions.

db4
John Benediktsson 2012-03-30 17:33:13 -07:00
parent 4f046a2339
commit 1a8e52379a
1 changed files with 20 additions and 0 deletions

View File

@ -116,4 +116,24 @@ ERROR: too-many-samples seq n ;
{ [ os unix? ] [ "random.unix" require ] }
} cond
: lognormal-random-float ( mean sigma -- n )
normal-random-float exp ;
: exponential-random-float ( lambda -- n )
0. 1. uniform-random-float 1 swap - log neg swap / ;
: weibull-random-float ( lambda k -- n )
[ 0. 1. uniform-random-float 1 swap - log neg ] dip 1. swap / ^ * ;
: pareto-random-float ( alpha -- n )
[ 0. 1. uniform-random-float 1 swap - ] dip [ 1. swap / ] bi@ ^ ;
: gauss-random-float ( mean sigma -- n )
0. 1. uniform-random-float 1 swap - log -2 * sqrt
(cos-random-float) * * + ;
: beta-random-float ( alpha beta -- n )
[ 1. gauss-random-float ] dip over zero?
[ 2drop 0 ] [ 1. gauss-random-float dupd + / ] if ;
"random.mersenne-twister" require