[Rd] Bug report: Function ppois(0:20, lambda=0.9) does not generate a non-decreasing result.

Iñaki Ucar iuc@r @ending from fedor@project@org
Tue Dec 4 11:27:36 CET 2018


On Tue, 4 Dec 2018 at 11:12, <qweytr1 using mail.ustc.edu.cn> wrote:
>
> function ppois is a function calculate the CDF of Poisson distribution, it should generate a non-decreasing result, but what I got is:
>
> > any(diff(ppois(0:19,lambda=0.9))<0)
> [1] TRUE
>
> Actually,
>
> > ppois(19,lambda=0.9)<ppois(18,lambda=0.9)
> [1] TRUE
>
> Which could not be TRUE.

This is just another manifestation of

0.1 * 3 > 0.3
#> [1] TRUE

This discussion returns to this list from time to time. TLDR; this is
not an R issue, but an unavoidable floating point issue. Solution:
work with log-probabilities instead.

any(diff(ppois(0:40, lambda=0.9, log.p=TRUE))<0)
#> [1] FALSE

Iñaki



More information about the R-devel mailing list