Jeff Newmiller
2025-Mar-09 17:46 UTC
[R] Number changed weirdly when converting to numeric
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.christofer at 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 at 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.
Stephanie Evert
2025-Mar-09 18:06 UTC
[R] Number changed weirdly when converting to numeric
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.333333343267441so it's not specific to as.numeric(). Best, Stephanie> On 9 Mar 2025, at 18:46, Jeff Newmiller via R-help <r-help at 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.christofer at 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 at 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 at 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]]