C语言学习|判断语句中的浮点数比较问题
浮点数在计算机中是如何存储的?
有一个浮点型变量i,如何判断i的值是否是2.3?
float a = 2.3;
if (a == 2.3) {
printf("a = 2.3\n");
}
else {
printf("a!=2.3\n");
}
输出:
a!=2.3 // 输出结果,不等于2.3。
实数5.4在计算机中存储的是5.40000009536743160000,比5.4稍大那么一点点;而实数2.3在计算机中存储的是2.29999995231628420000,比2.3稍小那么一点点。这个没有规律可言,总之是一个近似值。
在通常情况下,浮点型数据只能存储近似值。因此以后在写程序的时候,在if语句中千万不要用浮点数进行比较,不然结果往往都是错的。
#include <stdio.h>
#include <math.h>
int main(void)
{
float a = 2.3;
if (fabs(a - 2.3) < 0.000001) {
printf("a = 2.3\n");
}
else {
printf("a!=2.3\n");
}
return 0;
}
输出:
a = 2.3
其中fabs()
是C语言中的库函数,直接调用就可以了,它表示求浮点数的绝对值。其中f是float的缩写,abs是absolute的缩写,即“绝对”的意思。如果是求整数的绝对值就用abs()
。但是这两个库函数是包含在math.h
中的,所以前面一定要先写上# include<math.h>
。
貌似:float
的精度为6~7位有效数字,double
的精度为15~16位有效数字。
笔记来自《手把手教你学C语言》[1]
参考资料
吴明杰: 《手把手教你学C语言》