来自“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/