读书人

谁帮小弟我解释一上这个有关问题

发布时间: 2012-11-05 09:35:12 作者: rapoo

哪位高手帮我解释一下这个问题

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;} 

读书人网 >C++

热点推荐