From 3d71a2b0431892d739e3b861d2dd1baf9fdc46d3 Mon Sep 17 00:00:00 2001 From: adienes <51664769+adienes@users.noreply.github.com> Date: Mon, 5 Feb 2024 17:18:30 -0500 Subject: [PATCH] microoptimization on rand(::AliasTable) (#1831) * microoptimization on rand(::AliasTable) * Update src/samplers/aliastable.jl Co-authored-by: David Widmann --------- Co-authored-by: David Widmann --- src/samplers/aliastable.jl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/samplers/aliastable.jl b/src/samplers/aliastable.jl index ddebbce57a..56042930d7 100644 --- a/src/samplers/aliastable.jl +++ b/src/samplers/aliastable.jl @@ -15,9 +15,8 @@ end function rand(rng::AbstractRNG, s::AliasTable) i = rand(rng, 1:length(s.alias)) % Int - u = rand(rng) - @inbounds r = u < s.accept[i] ? i : s.alias[i] - r + # using `ifelse` improves performance here: github.com/JuliaStats/Distributions.jl/pull/1831/ + ifelse(rand(rng) < s.accept[i], i, s.alias[i]) end show(io::IO, s::AliasTable) = @printf(io, "AliasTable with %d entries", ncategories(s))