关于判断浮点数是否相等搜集的知识

今天读程序,突然发现判断浮点数相等不用“=”,以前没注意,在网上搜了下

  1》求差:
               if (fabs(a - b) < FLT_EPSILON)
               {
                       //执行代码。a==b
               }
    2》比较:
               if(!(a>b||a<b))  //觉得和“==”相同,建议用第一中方案。
               {
                       //执行代码。a==b
               }

查看include文件,在float.h头文件中有很多关于浮点数的宏定义:
[quote]#define FLT_EPSILON                1.19209290E-07F
#define LDBL_EPSILON                1.084202172485504E-19[/quote]

这两个宏定义可用来作为float、 long double趋0最小的判断值。即:
#include <float.h>;

double a, b;

if( abs(a-b) < FLT_EPSILON)

参考程序:


#include "stdio.h"
#include <float.h>
#include <math.h>

int main(int argc, char* argv[])
{
volatile double a = 321.0, b = 321.0423;
double result1, result2;

result1 = pow((a + b), 2.0);
result2 = pow(a, 2.0) + 2.0 * a * b + pow(b, 2.0);

if (fabs(result1 - result2) < FLT_EPSILON)
printf("fabs returns equals\n");

if ( ! (result1 < result2 || result1 > result2))
printf("That's funny!\n");

if (result1 == result2)
printf("result1 == result2\n");
else if (result1 > result2)
printf("result1 > result2\n");
else if (result1 < result2)
printf("result1 < result2\n");
else
printf("That's funny too!\n");

return 0;
}

从数学上看,两个结果应该相同,但计算结果却不同,说明运算过程有误差,还是用相减法比较靠谱!

实际实验中,会发现计算机的精确程度很高,如果只是比较最终结果而不是中间量或者是对精度要求不是变态的高,用“==”也行!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值