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.hof...@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@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]] ______________________________________________ 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.