以下代码显然是错误的.有什么问题?
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) int main()
{
float a = 0.7;
float b = 0.5;
if (a < 0.7)
{
if (b < 0.5) printf("2 are right");
else printf("1 is right");
}
else printf("0 are right");
}
Run Code Online (Sandbox Code Playgroud)
我本来期望这段代码的输出0 are right.但令我沮丧的是输出是什么1 is right原因?
可能重复:
为什么这些数字不相等?
0.9 == 1-0.1 >>> TRUE
0.9 == 1.1-0.2 >>> FALSE
Run Code Online (Sandbox Code Playgroud) 可能重复:
为什么这些数字不相等?
下面的表达式(评估为0.1)被认为大于0.1.
> round(1740/600,0) - 1740/600
[1] 0.1
> (round(1740/600,0) - 1740/600) <= 0.1
[1] FALSE //???!!???
> (round(1740/600,0) - 1740/600) <= 0.1000000000000000000000000000000000000001
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
认为问题可能是由于四舍五入,我尝试了同样的结果:
> 3 - 2.9
[1] 0.1
> (3 - 2.9) <=0.1
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
那么,给出了什么以及如何在不捏造截止值的情况下修复它?