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

时间:2012-08-08 17:14:46

标签: r rounding

  

可能重复:
  In R, what is the difference between these two?
  floating point issue in 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)

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

a=round(a,1)
b=round(b,1)
print(a==b)

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

感谢您的时间。

1 个答案:

答案 0 :(得分:4)

因为它们的数字并不完全相同。由于计算机表示数字,它们之间的差异非常小,也称为floating point errors

> a - b
[1] -8.881784e-16

Jon Skeet在此问题上有an excellent blog post,它在Stack Overflow上弹出some regularity

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