| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 604 人关注过本帖
标题:再现老问题。。。。
只看楼主 加入收藏
hzz063
Rank: 3Rank: 3
来 自:横县百合
等 级:论坛游侠
帖 子:80
专家分:114
注 册:2010-1-27
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:4 
再现老问题。。。。
在网上查了一下关于怎么判断一个浮点型数是否等于 0 ,有说不能直接有 == 来判断的,我也是迷迷糊糊的。
我试用 == 来判断:
程序代码:
#include<stdio.h>
int main(void)
{
    float i,j;
   
    scanf("%f",&i);
    if(0 == i)
        printf("Yes\n");
    else
        printf("No\n");
   
    return 0;
}
他居然能判断到 1e-45 ,看起来听精确的呀,
有人说要转成 <=  这种形式的,我又试了一下;
程序代码:
#include<stdio.h>
#include <math.h>
int main(void)
{
    float i;
   
    if(fabs(i) <= 1e-6)
        printf("Yes\n");
    else
        printf("No\n");

    return;
}
不过这个把 1e-6  改成 1e-100 ,它也并不行,最多也只能到 1e-45 ,
这下我更迷糊了,用 == 看起来也能做到呀,可为什么不能这样判断?
大家还有什么更好的吗?
搜索更多相关主题的帖子: 网上 color 
2010-05-04 23:36
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:90 
这么多分哇,哈哈,我来试试(不过楼主还是换个简明的标题吧)
——————————
原则:定点数是准确的,浮点数是近似的

——————————
1. 为什么浮点数是近似的?
答: 对应的为什么定点数是准确的,恩,我觉得显然可得...哈哈;好啦,言归正传,因为我们输入的时候在机器上都转二进制,这就存在末位截断误差,这个误差很小,但你想啊,假如每个数只有0.0000很多个0加一个1的误差,多了就误差大了嘛。都怪1-8-23单精度和1-11-52双精度格式的编码吧

2. 为什么要用<=不用==判断?
答:上面的明白了就很好理解了嘛,定义了一个数,假如你定义个十进制的10(无论啥型),但计算机转换二进制就可能转成10.0000000很多个0加以个1或者一些很小误差的东东,所以本身就是近似的值,当让不能用==这么严格的比较符号了撒
        还有哦,单精度和双精度的格式不一样,就好比整数0和保留一个小数的0.0不是同一个数,所以比较的时候都要转换成一样格式的,广陵曾经教过说不论啥型,有些编译器都换成双精度,这一转又有误差了,所以嘛,总是有误差,当然就只能近似判断咯。(起码32位格式的数据和64位的数据严格上永远不相等

3. 为什么楼主的用<=和==效果差不多?
答: 瞎猫碰到死耗子
            0.0000000000001和0.0000000000002保留为整数都是0,是一样的么?不一样...不是这耗子真是死的,只能说你的数据误差不够大

4. (扩展)那为什么要用这种表示方法?
答:虽不严格,但是严谨


———————————

        希望有帮到忙,详细的编码可以参考百科类资料或者本论坛这个帖子
https://bbs.bccn.net/thread-44500-1-1.html


———————————

好高兴哟,电脑坏了稀里糊涂的弄好了
      


[ 本帖最后由 pgy 于 2010-5-5 00:17 编辑 ]

我可好玩啦...不信你玩玩^_^
2010-05-05 00:13
dousao
Rank: 2
等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
收藏
得分:10 
看来2楼拿到100分了,用浮点数的时候切忌2点,1:浮点数本身不精确,2:浮点数计算会有误差,只是大小问题,积累到量后,自会影响程序

同行售各专业书籍,全1折,淘宝店:http://maishu.
2010-05-05 00:38
kliulaiwanl
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-06 22:28
jcslt
Rank: 8Rank: 8
来 自:90-xx.com
等 级:蝙蝠侠
帖 子:251
专家分:975
注 册:2009-10-10
收藏
得分:0 
回复 2楼 pgy
果然不一样,一出手就撞100分的题。。。

www.
2010-05-07 00:26
快速回复:再现老问题。。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023989 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved