Skip to content

Commit eb0723f

Browse files
Merge pull request #156 from nsajko/perf
2 parents ac31d99 + 0ab751e commit eb0723f

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/extras/random.jl

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
function rand(rng::AbstractRNG, ::Random.SamplerTrivial{Random.CloseOpen01{DoubleFloat{T}}}) where {T<:IEEEFloat}
2-
hi, lo = rand(rng, T, 2)
2+
hi = rand(rng, T)
3+
lo = rand(rng, T)
34
if hi === zero(T)
45
if lo === zero(T)
5-
return zero(DoubleFloat(T))
6+
return DoubleFloat(zero(T))
67
end
78
hi, lo = lo, hi
89
end
@@ -81,16 +82,16 @@ end
8182
# normal variates
8283

8384
function randn(rng::AbstractRNG, ::Type{DoubleFloat{T}}) where {T<:IEEEFloat}
84-
urand1, urand2 = rand(rng, DoubleFloat{T}, 2)
85-
urand1 = urand1 + urand1 - 1
86-
urand2 = urand2 + urand2 - 1
87-
s = urand1*urand1 + urand2*urand2
85+
urand1, urand2, s = ntuple(i -> zero(DoubleFloat{T}), Val{3}())
8886

89-
while s >= 1 || s === 0
90-
urand1, urand2 = rand(rng, DoubleFloat{T}, 2)
87+
while true
88+
urand1 = rand(rng, DoubleFloat{T})
89+
urand2 = rand(rng, DoubleFloat{T})
9190
urand1 = urand1 + urand1 - 1
9291
urand2 = urand2 + urand2 - 1
9392
s = urand1*urand1 + urand2*urand2
93+
94+
(s >= 1 | iszero(s)) || break
9495
end
9596

9697
s = sqrt( -log(s) / s )

0 commit comments

Comments
 (0)