在 R 中比较时,相同的数字显示为 false

Tia*_*tea 0 r rounding

可能重复:
在 R 中,这两者有什么区别?
R中的浮点问题?

这是我创建的代码的一部分。我花了几天时间寻找问题,最终意识到应该为 TRUE 的比较被 R 计算为 FALSE。我在 Windows 上使用 R 2.14.2 64 位。这是重现问题的代码。

concList= c(1.15, 1.15, 1.15 ,1.15 ,1.15 ,1.15 )
concList=concList-0.4
a=sum(concList)
b=length(concList)*0.75
str(a)
str(b)
print(a==b)
Run Code Online (Sandbox Code Playgroud)

即使它们显示为完全相同的数字,最后一次打印也会导致 FALSE。我认为这可能是 R 的浮点数值表示上的一些问题,所以我添加了下面的代码来解决这个问题。

a=round(a,1)
b=round(b,1)
print(a==b)
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有更优雅的解决方案?这是一个应该报告的错误吗?

谢谢你的时间。

Dav*_*son 8

因为它们不是完全相同的数字。由于计算机的数字表示方式,它们的差异非常小,也称为浮点错误

> a - b
[1] -8.881784e-16
Run Code Online (Sandbox Code Playgroud)

Jon Skeet 有一篇关于这个问题的优秀博客文章,该文章定期出现 在 Stack Overflow 上。

正如 @mrdwab 在评论中建议的那样,您应该使用all.equal(a, b)来测试接近相等。