Out of curiosity, what does atof() do on that platform? What does
the following C program do on arm64? (I don't know exactly what R does
to coerce character to double, but this is what I would guess ...)
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char *str = "-177253333.333333343267441";
double x = atof(str);
printf("%0.15f\n", x);
return 0;
}
To my surprise, apparently R doesn't use stdlib to convert.
From
https://github.com/r-devel/r-svn/blob/bb64b28d8cc2e2863eb664e7f83b0a7206b4b1d4/src/main/util.c#L2087C1-L2107:
/* ...
use our own strtod/atof to mitigate effects of setting LC_NUMERIC
Also allows complete control of which non-numeric strings are
accepted; e.g. glibc allows NANxxxx, macOS NAN(s), this accepts "NA".
... */
Should this be escalated to r-devel (or r-bugzilla)? Nothing pops
out at me from the recent NEWS ...
Ben Bolker
On 3/9/25 14:06, Stephanie Evert wrote:
For once, that doesn't seem to be the issue here. The bug only seems to happen
on arm64 and doesn't reproduce on x86_64 hardware.
x <- as.numeric("-177253333.333333343267441")
sprintf("%.15f", x)
[1] "-177253333.333333373069763"
This is the number adjacent to -177253333.333333343267441 in IEEE 754.
writeBin(x, raw(8))
[1] ac aa aa aa 57 21 a5 c1
If you look at the hexadecimal representation, the least significant bit
appears to be off by one: the first byte should be 0xAB rather than 0xAC
(according to online calculators such as
https://numeral-systems.com/ieee-754-converter/).
Seems that decimal-to-float conversion has a bug on arm64. Note that I get the
same result with
x <- -177253333.333333343267441
so it's not specific to as.numeric().
Best,
Stephanie
On 9 Mar 2025, at 18:46, Jeff Newmiller via R-help <r-help@r-project.org> wrote:
https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f
https://0.30000000000000004.com/
On March 9, 2025 10:12:47 AM PDT, Christofer Bogaso
<bogaso.christo...@gmail.com> wrote:
Hi,
I have below simple conversion
sprintf("%0.15f", as.numeric("-177253333.333333343267441"))
[1] "-177253333.333333373069763"
I could not figure out why the input and output is different?
Clearly this conversion is incorrect. Is there any way to convert to
numerical properly?
sessionInfo()
R version 4.4.0 (2024-04-24)
Platform: aarch64-apple-darwin20
Running under: macOS 15.3.1
Matrix products: default
BLAS:
/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
LAPACK:
/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;
LAPACK version 3.12.0
locale:
[1] C/UTF-8/C/C/C/C
time zone: Asia
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_4.4.0
______________________________________________
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 https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
--
Sent from my phone. Please excuse my brevity.
______________________________________________
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 https://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 https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
--
Dr. Benjamin Bolker
Professor, Mathematics & Statistics and Biology, McMaster University
Director, School of Computational Science and Engineering
* E-mail is sent at my convenience; I don't expect replies outside of
working hours.
______________________________________________
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 https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.