| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12100 人关注过本帖, 1 人收藏
标题:fabs(a)<1e-6的问题
只看楼主 加入收藏
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
结帖率:93.75%
收藏(1)
已结贴  问题点数:1 回复次数:5 
fabs(a)<1e-6的问题
为什么不直接用a==0,而非要用这么大一堆
2013-10-02 17:13
tianxiadiyih
Rank: 2
来 自:神秘星球
等 级:论坛游民
帖 子:30
专家分:48
注 册:2013-10-2
收藏
得分:0 
不懂你的问题

永远的学生
2013-10-02 17:38
tianxiadiyih
Rank: 2
来 自:神秘星球
等 级:论坛游民
帖 子:30
专家分:48
注 册:2013-10-2
收藏
得分:0 
fabs(a)<=0这个问题还不大 但要是fabs(a)==0的话就出问题了 浮点型的0 在内存中并不是严格等于0的
比较完全相等通常不可靠.
因此可以认为当一个浮点数离原点足够近时,也就是f>0.00001 && f<-0.00001,认为f是0

永远的学生
2013-10-02 17:41
tianxiadiyih
Rank: 2
来 自:神秘星球
等 级:论坛游民
帖 子:30
专家分:48
注 册:2013-10-2
收藏
得分:0 
因为float浮点数是存在精度的。

if(fabs(a)<1e-6) 是用来判断a是否等于0,认为当a的绝对值小于10的-6次方的时候,就将a视作0

永远的学生
2013-10-02 17:42
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:1 
因为实数在计算和存储时会有一定的误差,如果直接用if(a==0)判断,可能本来是0的数被误判为非0,比如如下程序,
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    float a;
    float b,c;
    b=2.0;
    c=sqrt(2);
    a=b-c*c;
    if(a==0)
        printf("a==0");
    else
        printf("a!=0");
    return 0;
}
运行结果为a!=0,但如果换用if(a<1e-6)判断,则输出a==0
2013-10-02 23:21
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
收藏
得分:0 
回复 5楼 Explorerlxz
谢谢
2013-10-03 15:26
快速回复:fabs(a)<1e-6的问题
数据加载中...
 
   



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

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