r - 为什么R将大数视为偶数

标签 r numbers integer

来自“http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-the7.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/

相关文章:

c - 如何读取逗号分隔字符串中的名称和整数值?

R:如何相对于 x 轴散布(抖动)点?

编辑文件时 Rstudio rsession 挂起

r - 选择 group_by 中的值并根据 R 中的另一列值进行汇总

python - 如何在 Jupyter Notebook Python 3.6.2 中关闭行号

javascript - 每个 div 中的随机数

c - 如何在函数中打印出大于9?

r - 为什么我用Sum()不能准确计算出90点以上但不包括100点的数据个数

mysql - 文本与数值的 SQL BETWEEN

format - 如何删除前导零并将数字移到整数变量的最左边