为什么R将大数视为偶数

Cho*_*ung 3 integer numbers r

从" 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
Run Code Online (Sandbox Code Playgroud)

可以忽略错误消息(可能完全丧失模数精度)

等等..

都不是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
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 8

一个IEEE双精度值具有53位尾数.任何需要超过53个二进制数字精度的数字都将被舍入,即从54开始的数字将被隐式设置为零.因此,幅度大于2 ^ 53的任何数字必然是偶数(因为其整数表示的最低有效位超出浮点精度,因此为零).