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 <dutangc at gmail.com>
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 <ikrylov at disroot.org> a
?crit :
> >
> > ? Sat, 25 Oct 2025 11:45:42 +0200
> > Christophe Dutang <dutangc at gmail.com> ?????:
> >
> >> 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)
>
> ______________________________________________
> R-help at r-project.org 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.