以下代码显然是错误的.有什么问题?
i <- 0.1
i <- i + 0.05
i
## [1] 0.15
if(i==0.15) cat("i equals 0.15") else cat("i does not equal 0.15")
## i does not equal 0.15
Run Code Online (Sandbox Code Playgroud) 可能重复:
R中的数字比较难度
大家好,
根据"R Inferno"论文.我现在正处于R地狱的第一圈.这是异教徒期望0.1 == 0.3/3的地方.Paper建议all.equal在这种情况下使用函数,但是我需要检查"> ="或"<="条件.目前他们的例子失败了:
> .1 >= .3/3
[1] TRUE
> .1 <= .3/3
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
是否有类似于all.equal的函数来检查不等式?
谢谢,
伊利亚
可能重复:
在 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)
我的问题是,有没有更优雅的解决方案?这是一个应该报告的错误吗?
谢谢你的时间。