来自“http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-the”7.31
我们已经知道大数(超过 2^53)在模运算中会出错。
但是,我不明白为什么所有的大数都被视为偶数(我从未见过超过 2^53 的大整数的“奇数”),即使我在近似值上有一些错误
(2^53+1)%%2
(2^100-1)%%2
错误信息(模数精度可能完全丧失)可以忽略
等等。
都不是1而是0
为什么会这样? (我知道有一些近似值,但我需要具体知道原因)
> print(2^54,22)
[1] 18014398509481984.00000
> print(2^54+1,22)
[1] 18014398509481984.00000
> print(2^54+2,22)
[1] 18014398509481984.00000
> print(2^54+3,22)
[1] 18014398509481988.0000
最佳答案
安IEEE double precision value有一个 53 位尾数。任何需要超过 53 位二进制精度的数字都将被四舍五入,即从 54 开始的数字将被隐式设置为零。因此,幅度大于 2^53 的任何数字都必然是偶数(因为其整数表示的最低有效位超出了浮点精度,因此为零)。
关于r - 为什么R将大数视为偶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15369961/