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@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.

Reply via email to