哪位高手帮我解释一下这个问题
- C/C++ code
写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001)
为什么是这样的 不懂。谢谢!
[解决办法]
因为float数据的存储是会丢精度的,所有不能直接比较是否相等
[解决办法]
这只是判断x的绝对值是否大于10的-5次方
浮点可以精确表示零,0就是0.0f,判断一个浮点数是否等于零,直接和0比较就是了
但是如下就不行
- C/C++ code
int main(){ for(float x=1.0f;x>0.0f;x-=0.1f) { printf("%.64f\n",x); if(0.0f==x) printf("get 0.0f\n"); } return 0;}
[解决办法]
更正:
0.09999992698431015是不精确的0.1f
上例得到的应是-0.000000074505805969238281
把循环条件改一下
for(float x=1.0f;x>-0.1f;x-=0.1f)
[解决办法]
当你确切知道一个浮点数精确等于0.0f,它是零值,完全可以如下例使用
- C/C++ code
int main(){ int i=0; float f=0.0f; printf("i==%66.64d\n",i); printf("f==%66.64f\n",f); if(f==i) printf("f==i==0.0f==0\n"); return 0;}