为什么浮点数不能比较?

Shu*_*ham 4 c c++ floating-point

可能重复:
与float文字的float比较中的奇怪输出

#include<stdio.h>
int main()
{
float me = 1.7;
if(me==1.7)
   printf("C");
else
   printf("C++");
}

Output: C++
Run Code Online (Sandbox Code Playgroud)

现在说这种行为的原因是许多浮点数不能用二进制的绝对精度表示.

我的问题是 - 如果计算机以二进制形式思考和操纵.代表性的任何不确定性在比较时me都是相同的1.7.所以两者都应该是平等的.

那么类型转换如何解决这个问题呢? (float)1.7

nos*_*nos 13

您正在将浮点数与双精度值进行比较.文字1.7是双重的.

你已经将它存储在浮点数中,浮点数的精度可能低于双精度数,因此me == 1.7将1.7作为浮点数(提升为双精度值)与1.7作为双精度值进行比较.

在这种情况下,me == 1.7f应该使它们相等,或者变为medoubledouble me = 1.7;

但是在一般情况下,你想要使用epsilon来比较等式,如@duffymo所示.

此外,义务阅读.