No, 0 and 5-19 are not "equalled". THey are quite distinct. As for pt() returning something smaller than double.eps, why wouldn't it? If I calculate 10^-30, I get 1e-30, which is much smaller than double.eps, but is still correct. It would be a serious error to return 0 for 10^-30. Welcome to the wonderful world of floating-point arithmetic. This really has nothing to do with R.
On Sun, 26 Oct 2025 at 09:38, Christophe Dutang <[email protected]> wrote: > > Thanks for your answers. > > I was not aware of the R function expm1(). > > I’m completely aware that 1 == 1 - 5e-19. But I was wondering why pt() > returns something smaller than double.eps. > > For students who will use this exercise, it is disturbing to find 0 or 5e-19 > : yet it will be a good exercise to find that these quantities are equalled. > > Regards, Christophe > > > Le 25 oct. 2025 à 12:14, Ivan Krylov <[email protected]> a écrit : > > > > В Sat, 25 Oct 2025 11:45:42 +0200 > > Christophe Dutang <[email protected]> пишет: > > > >> Indeed, the p-value is lower than the epsilon machine > >> > >>> pt(t_score, df = n-2, lower=FALSE) < .Machine$double.eps > >> [1] TRUE > > > > Which means that for lower=TRUE, there will not be enough digits in R's > > numeric() type to represent the 5*10^-19 subtracted from 1 and > > approximately 16 zeroes. > > > > Instead, you can verify your answer by asking for the logarithm of the > > number that is too close to 1, thus retaining more significant digits: > > > > print( > > -expm1(pt(t_score, df = n-2, lower=TRUE, log.p = TRUE)), > > digits=16 > > ) > > # [1] 2.539746620181249e-19 > > print(pt(t_score, df = n-2, lower=FALSE), digits=16) > > # [1] 2.539746620181248e-19 > > > > expm1(.) computes exp(.)-1 while retaining precision for numbers that > > are too close to 0, for which exp() would otherwise return 1. > > > > See the links in > > https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f > > for a more detailed explanation. > > > > -- > > Best regards, > > Ivan > > (flipping the "days since referring to R FAQ 7.31" sign back to 0) > > ______________________________________________ > [email protected] mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ [email protected] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide https://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

