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

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Fri Feb 18 10:15:37 CET 2022


Hello,

It doesn't lose accuracy?


print(2.48e-324)
#[1] 4.940656e-324
as.character(2.48e-324)
#[1] "4.94065645841247e-324"

format(2.48e-324, digits = 17)
#[1] "4.9406564584124654e-324"


Those are the same loss of accuracy errors.

Hope this helps,

Rui Barradas


Às 00:04 de 18/02/2022, Andrew Simmons escreveu:
> 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]]
> 
> ______________________________________________
> 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.



More information about the R-help mailing list