#include<stdio.h>
int main()
{
float a,b;
a=4.375;
b=4.385;
if(a==4.375)
printf("YES\n");
else
printf("NO\n");
if(b==4.385)
printf("YES\n");
else
printf("NO\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码的答案:
YES
NO
Run Code Online (Sandbox Code Playgroud)
我一直在想,如果我将浮点值与双倍值进行比较.它永远不会匹配它.除非值是纯整数.但这里浮动"a"有4.375确切,但"b"没有
printf("%0.20f\n",a);
printf("%0.20f\n",b);
This prints :
4.37500000000000000000
4.38500022888183593750
but if i print
printf("%0.20f\n",4.475);
It prints 4.47499990463256835938
Run Code Online (Sandbox Code Playgroud)
这种舍入效应如何在某些情况下显示,而在其他情况下则不然.
谁能解释一下呢."WE"应该如何判断float变量中的值何时与其中包含的值匹配,何时不匹配?
0.5只有当十进制分数可以用、0.25、 ... 等二进制分数相加时,从十进制分数到二进制分数的转换才是精确的。
例如在你的情况下
0.375 = 0.25 + 0.125 = 2 -2 + 2 -3
因此可以用二进制分数来精确表示。
由于数字0.385不能用二进制分数精确表示。0.5因此,诸如、0.25、 、 ... 等数字0.125或这些数字的组合可以精确地表示为浮点数。其他值(例如 0.385)在对其执行比较或相等运算时会给出不正确的结果。