x <- 800:1200
bd0x1k <- bd0(x, np = 1000)
plot(x, bd0x1k, type="l", ylab = "bd0(x, np=1000)")
bd0x1kC <- bd0C(x, np = 1000)
lines(x, bd0x1kC, col=2)
bd0.1d1 <- bd0_p1l1d1(x, 1000)
bd0.1d <- bd0_p1l1d (x, 1000)
bd0.1pm <- bd0_l1pm (x, 1000)
stopifnot(exprs = {
all.equal(bd0x1kC, bd0x1k, tol=1e-14) # even tol=0 currently ..
all.equal(bd0x1kC, bd0.1d1, tol=1e-14)
all.equal(bd0x1kC, bd0.1d , tol=1e-14)
all.equal(bd0x1kC, bd0.1pm, tol=1e-14)
})
str(log1pmx) ##--> play with { tol_logcf, eps2, minL1, trace.lcf, logCF }
ebd0x1k <- ebd0 (x, 1000)
exC <- ebd0C(x, 1000)
stopifnot(all.equal(exC, ebd0x1k, tol=4e-16))
lines(x, rowSums(ebd0x1k), col=adjustcolor(4, 1/2), lwd=4)
x <- 0:250
dp <- dpois (x, 48, log=TRUE)# R's 'stats' pkg function
dp.r <- dpois_raw(x, 48, log=TRUE)
all.equal(dp, dp.r, tol = 0) # on Linux 64b, see TRUE
stopifnot(all.equal(dp, dp.r, tol = 1e-14))
## dpois_raw() versions:
(vers <- eval(formals(dpois_raw)$version))
mv <- sapply(vers, function(v) dpois_raw(x, 48, version=v))
matplot(x, mv, type="h", log="y", main="dpois_raw(x, 48, version=*)") # "fine"
if(all(mv[,"ebd0_C1"] == mv[,"ebd0_v1"])) {
cat("versions 'ebd0_C1' and 'ebd0_v1' are identical for lambda=48\n")
mv <- mv[, vers != "ebd0_C1"]
}
## now look at *relative* errors -- need "Rmpfr" for "truth"
if(requireNamespace("Rmpfr")) {
dM <- Rmpfr::dpois(Rmpfr::mpfr(x, 256), 48)
asN <- Rmpfr::asNumeric
relE <- asN(mv / dM - 1)
cols <- adjustcolor(1:ncol(mv), 1/2)
mtit <- "relative Errors of dpois_raw(x, 48, version = * )"
matplot(x, relE, type="l", col=cols, lwd=3, lty=1, main=mtit)
legend("topleft", colnames(mv), col=cols, lwd=3, bty="n")
matplot(x, abs(relE), ylim=pmax(1e-18, range(abs(relE))), type="l", log="y",
main=mtit, col=cols, lwd=2, lty=1, yaxt="n")
sfsmisc::eaxis(2)
legend("bottomright", colnames(mv), col=cols, lwd=2, bty="n", ncol=3)
ee <- c(.5, 1, 2)* 2^-52; eC <- quote(epsilon[C])
abline(h=ee, lty=2, col="gray", lwd=c(1,2,1))
axis(4, at=ee[2:3], expression(epsilon[C], 2 * epsilon[C]), col="gray", las=1)
par(new=TRUE)
plot(x, asN(dM), type="h", col=adjustcolor("darkgreen", 1/3), axes=FALSE, ann=FALSE)
stopifnot(abs(relE) < 8e-13) # seen 2.57e-13
}# Rmpfr
Run the code above in your browser using DataLab