diff --git a/Project.toml b/Project.toml index 8e9cd36..94a4a24 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "StableRNGs" uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" authors = ["Rafael Fourquet "] -version = "1.0.3" +version = "1.0.4" [deps] Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" diff --git a/src/StableRNGs.jl b/src/StableRNGs.jl index a157d54..ea26087 100644 --- a/src/StableRNGs.jl +++ b/src/StableRNGs.jl @@ -151,12 +151,17 @@ function _shuffle!(r::StableRNG, a::AbstractArray) mask = nextpow(2, n) - 1 for i = n:-1:2 (mask >> 1) == i && (mask >>= 1) - j = 1 + rand(r, Random.ltm52(i, mask)) + j = 1 + rand(r, ltm52(i, mask)) a[i], a[j] = a[j], a[i] end return a end +# copied from Random, from which this was deleted in https://github.com/JuliaLang/julia/pull/50509 +"Return a sampler generating a random `Int` (masked with `mask`) in ``[0, n)``, when `n <= 2^52`." +ltm52(n::Int, mask::Int=nextpow(2, n)-1) = LessThan(n-1, Masked(mask, Random.UInt52Raw(Int))) + + # https://github.com/JuliaRandom/StableRNGs.jl/issues/20 @noinline function Random.randn_unlikely(rng::StableRNG, idx, rabs, x) @inbounds if idx == 0