Distributions.jl icon indicating copy to clipboard operation
Distributions.jl copied to clipboard

Poisson rand InexactError for extremely large parameter values

Open simonbyrne opened this issue 6 years ago • 6 comments

julia> rand(Poisson(1e20))
ERROR: InexactError: Int64(Int64, 9.999999997262139e19)
Stacktrace:
 [1] Type at ./float.jl:700 [inlined]
 [2] convert at ./number.jl:7 [inlined]
 [3] rand(::Poisson{Float64}) at /Users/simon/.julia/packages/Distributions/WHjOk/src/univariate/discrete/poisson.jl:89
 [4] top-level scope at none:0

Note that the underlying Rmath library actually works in terms of Float64s (see https://github.com/JuliaStats/Rmath-julia/issues/11).

simonbyrne avatar Jan 24 '19 04:01 simonbyrne

I think it only fails if the return value is actually outside the range of Int:

julia> rand(Poisson(float(typemax(Int64))))
9223372034018728960

julia> rand(Poisson(float(typemax(Int64))))
9223372033786713088

julia> rand(Poisson(float(typemax(Int64))))
ERROR: InexactError: Int64(Int64, 9.223372040475427e18)

mschauer avatar Jan 24 '19 07:01 mschauer

PS: Someday somewhere in some parallel universe a rand(Poisson(1.0)) will fail with overflow.

mschauer avatar Jan 24 '19 07:01 mschauer

I guess it would be useful to have a rand(::Type{Float64}, d::Poisson) method that didn't do the conversion to Int.

simonbyrne avatar Jan 24 '19 16:01 simonbyrne

It would be nice if this could return a better error message.

CameronBieganek avatar Feb 24 '21 19:02 CameronBieganek

Any development on this issue?

SamuelBrand1 avatar Oct 10 '24 10:10 SamuelBrand1

https://github.com/JuliaStats/Distributions.jl/pull/1433 would have fixed it but we did not want to follow through with other changes in this PR. I think we can return to the Poisson case (and other similar cases) after #1905.

devmotion avatar Oct 10 '24 10:10 devmotion