C语言中比较两个浮点数是否相等的方法

2018-08-3115:40:31来源:siaisjack 评论 2,005 views

今天在面试中碰到这个问题,当时还迷糊了一番,毕竟平时没怎么用过,记得以前看过,现在有点记不清了,这是C语言很基础的东西,面试一般会遇到。

对两个浮点数判断大小和是否相等不能直接用==来判断,会出错,明明相等的两个数比较反而是不相等。

对于两个浮点数比较只能通过相减并与预先设定的精度比较,记得要取绝对值:

if( fabs(f1-f2) < 预先指定的精度)
{
      ...
}

例子:

#define EPSILON 0.000001 //根据精度需要
if ( fabs( fa - fb) < EPSILON )
{
    printf("fa<fb\n");
}
  • fabs函数与abs函数
    数学函数: fabs
    原型:extern float fabs(float x);
    用法:#include <math.h>
    功能:求浮点数x的绝对值
    说明:计算|x|, 当x不为负时返回x,否则返回-x
    举例:
// fabs.c

#include <syslib.h>
#include <math.h>

main()
{
    float x;

    clrscr();        // clear screen
    textmode(0x00);  // 6 lines per LCD screen

    x=-74.12;
    printf("|%f|=%f\n",x,fabs(x));
    x=0;
    printf("|%f|=%f\n",x,fabs(x));
    x=74.12;
    printf("|%f|=%f\n",x,fabs(x));

    getchar();
    return 0;
}

abs函数是针对整数的:

#include <stdio.h>
#include <math.h>
int main()
{
    int x=-10;
    printf("%d",abs(x));
}

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: