为什么这个简单的表达式会导致错误的值

Why this simple expression is resulting in the wrong value

提问人:Gustavo Gomes 提问时间:9/8/2022 最后编辑:Gregor ThomasGustavo Gomes 更新时间:9/8/2022 访问量:58

问:

这个表达怎么是真的?

(13532728 + 1 + 76561197960265728) == (13532740 + 1 + 76561197960265728)

我计算了两个分开的表达式,它们得出相同的值:

(13532728 + 1 + 76561197960265728) 和 (13532740 + 1 + 76561197960265728) 在我的 R 工作区中都生成相同的值:76561197973798464。这显然是错误的,只有双方的第一个数字发生了变化。

我以为这可能是一个溢出错误。但不是数值的最大值。Machine$double.xmax,这是巨大的。

任何人都可以解释为什么 R 中的计算是错误的?

r 精度

评论

2赞 r2evans 9/8/2022
我认为这与 stackoverflow.com/q/9508518/3358272cran.r-project.org/doc/FAQ/ 密切相关......;它们是相关的,因为它们都处理浮点存储完美保留所有数字的假设,而事实并非如此。
1赞 Gregor Thomas 9/8/2022
对于为什么类的 16 位整数值会失去精度,我没有一个很好的答案,但是有很多软件包可以解决这个问题。 这已经足够了,或者像这样的包可以为您提供所需的整数精度。numericbit64gmp
0赞 Gustavo Gomes 9/8/2022
这确实是精度误差的损失。Bit64 解决了这个问题。谢谢

答: 暂无答案