File tree 1 file changed +16
-13
lines changed
1 file changed +16
-13
lines changed Original file line number Diff line number Diff line change @@ -984,20 +984,23 @@ randn(dims::Int...) = randn!(Array(Float64, dims...))
984
984
randn (rng:: MersenneTwister , dims:: Dims ) = randn! (rng, Array (Float64, dims))
985
985
randn (rng:: MersenneTwister , dims:: Int... ) = randn! (rng, Array (Float64, dims... ))
986
986
987
- function randmtzig_exprnd (rng:: MersenneTwister = GLOBAL_RNG)
987
+ @inline function randmtzig_exprnd (rng:: MersenneTwister = GLOBAL_RNG)
988
988
@inbounds begin
989
- while true
990
- ri = rand_ui52 (rng)
991
- idx = ri & 0xFF
992
- x = ri* we[idx+ 1 ]
993
- if ri < ke[idx+ 1 ]
994
- return x # 98.9% of the time we return here 1st try
995
- elseif idx == 0
996
- return ziggurat_exp_r - log (rand (rng))
997
- elseif (fe[idx] - fe[idx+ 1 ])* rand (rng) + fe[idx+ 1 ] < exp (- x)
998
- return x # return from the triangular area
999
- end
1000
- end
989
+ ri = rand_ui52 (rng)
990
+ idx = ri & 0xFF
991
+ x = ri* we[idx+ 1 ]
992
+ ri < ke[idx+ 1 ] && return x # 98.9% of the time we return here 1st try
993
+ return randmtzig_exprnd_unlikely (rng, idx, x)
994
+ end
995
+ end
996
+
997
+ function randmtzig_exprnd_unlikely (rng, idx, x)
998
+ @inbounds if idx == 0
999
+ return ziggurat_exp_r - log (rand (rng))
1000
+ elseif (fe[idx] - fe[idx+ 1 ])* rand (rng) + fe[idx+ 1 ] < exp (- x)
1001
+ return x # return from the triangular area
1002
+ else
1003
+ return randmtzig_exprnd (rng)
1001
1004
end
1002
1005
end
1003
1006
You can’t perform that action at this time.
0 commit comments