注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

斗天堂

douzsh还活着

 
 
 

日志

 
 

c中浮点数相等的判定  

2009-06-08 14:52:28|  分类: C语言基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近在做浮点数运算的时候发现这个问题,浮点数有时候是经纬度的,有时候是很大的xyz坐标系下的,如果用一个epsilon是肯定有问题的,但是如何判断是否相等也是必须进行的,网上找到一篇帖子,地址http://blog.csdn.net/sharkw/archive/2007/12/14/1937581.aspx,其函数如下

//  函数:   bool IsEqual(float f1, float f2, int absDelta)

//  功能:把比较两个浮点数是否近似相同

//  输入:f1, f2参与比较的两个浮点数

//               absDelta 两个浮点数之间允许有多少个其他可以精确表达的浮点数存在,相当于相对误差

//  输出:   true,两个浮点数进行相等; false 两个浮点数不等

//  注意:仅仅适合IEEE 32位浮点数结构

bool IsEqual(float f1, float f2, int absDelta)

{

       int i1, i2;

       i1 = ( f1>0)  ? ((int&)f1)  : ( (int&) f1 - 0x80000000 );

       i2 = (f2>0)  ? ((int&)f2)  : ( (int&) f2 - 0x80000000 );

       return   ((abs(i1-i2))<absDelta) ? true : false;

}

 

这里其实还是有问题的,如果i1-i2超过了abs的范围,可能返回负数,这样就肯定小于absDelta了 ,所以最好做如下修改:

    return   ((abs(i1-i2))<absDelta && (abs(i1-i2))>=0) ? true : false;

  评论这张
 
阅读(786)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017