[R] Why does the print method fail for very small numbers?

Andrew Simmons @kw@|mmo @end|ng |rom gm@||@com
Fri Feb 18 01:04:53 CET 2022


It should also be noted that format(x, digits = 17) instead of
as.character(x) won't lose any accuracy.

On Thu, Feb 17, 2022, 17:41 Marius Hofert <marius.hofert using uwaterloo.ca>
wrote:

> Dear expeRts,
>
> I'm familiar with IEEE 754. Is there an easy way to explain why even
> just printing of small numbers fails?
>
> 1e-317 # 1e-317 => fine
> 1e-318 # 9.999987e-319 => gets tricky; seems to call print() =>
> as.character() => format() => paste()
> 1e-318 == 9.999987e-319 # TRUE
> 2.48e-324 # prints 4.940656e-324 for me
> 2.48e-324 == 4.940656e-324 # TRUE
> ## Relative error as a plot
> rel_error <- function(x)
>     plot(abs((as.numeric(as.character(x)) - x) / x), type = "l",
>          ylab = "Relative error between x and as.numeric(as.character(x))")
> rel_error(seq(0.001, 0.001 + .Machine$double.xmin, length.out = 1001)) #
> fine
> rel_error(seq(0, .Machine$double.xmin, length.out = 1001)) # printing
> breaks down
>
> Of course, [0,.Machine$double.xmin] is somewhat of a strange set of
> numbers to consider,
> and I expect things like "==" to be easily fooled there, but already the
> print method (?)
>
> Thanks & cheers,
> Marius
>
> sessionInfo()
> R version 4.1.2 (2021-11-01)
> Platform: x86_64-apple-darwin21.2.0 (64-bit)
> Running under: macOS Monterey 12.1
> ...
>
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list