On Tue, 4 Dec 2018 at 11:12, <qwey...@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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel