float和double类型数据做比较问题
2014-03-10 22:36
393 查看
因为float和double类型的数据有数据精度,因此直接用“==”或者“!=”做比较会出现很多的问题,这类比较一般都使用宏定义一个数据精度,在精度允许误差范围内则认为两个数相等。
以最常见的问题做分析:
float a 与0作比较程序:
我们经常不这样写代码
if(a == 0.0)
{
printf("a equal 0");
}
而是这样写
#define EPSINON 1e-6
if(fabs(a-0.0) < EPSINON)
{
printf("a equal 0");
}
下面的代码将为我们解开疑惑:
1 #include <stdio.h>
2 #include <math.h>
3 #define EPSINON 1e-6
4
5 int main(int argc,char *argv[])
6 {
7 float a = 120.02;
8 float b = 120;
9 float c = 0.02;
10
11
12 if(a-b == c)
13 {
14 printf("%f - %f = %f\n",a,b,c);
15 }
16 printf("a = %f,b = %f,a-b = %f\n",a,b,a-b);
17
18
19 return 0;
20 }
执行结果如下:
linux@ubuntu:~/c_language$ ./a.out
a = 120.019997,b = 120.000000,a-b = 0.019997
从以上代码就可以看出精度在float和double比较中的重要性
以最常见的问题做分析:
float a 与0作比较程序:
我们经常不这样写代码
if(a == 0.0)
{
printf("a equal 0");
}
而是这样写
#define EPSINON 1e-6
if(fabs(a-0.0) < EPSINON)
{
printf("a equal 0");
}
下面的代码将为我们解开疑惑:
1 #include <stdio.h>
2 #include <math.h>
3 #define EPSINON 1e-6
4
5 int main(int argc,char *argv[])
6 {
7 float a = 120.02;
8 float b = 120;
9 float c = 0.02;
10
11
12 if(a-b == c)
13 {
14 printf("%f - %f = %f\n",a,b,c);
15 }
16 printf("a = %f,b = %f,a-b = %f\n",a,b,a-b);
17
18
19 return 0;
20 }
执行结果如下:
linux@ubuntu:~/c_language$ ./a.out
a = 120.019997,b = 120.000000,a-b = 0.019997
从以上代码就可以看出精度在float和double比较中的重要性
相关文章推荐
- 基于C++浮点数(float、double)类型数据比较与转换的详解
- JAVA基本数据类型范围和float、double精度问题
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- C++浮点数(float、double)类型数据比较、转换分析总结
- FLOAT或DOUBLE列与具有数值类型的数值进行比较 问题
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- Java double/float数据类型中的0.0和-0.0问题
- 关于float double的数据类型的细节,在处理转换问题的时候非常有用
- 基于C++浮点数(float、double)类型数据比较与转换的详解
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- 基于C++浮点数(float、double)类型数据比较与转换的详解
- 基于C++浮点数(float、double)类型数据比较与转换的详解
- java问题总结之3--用非科学计数法输出int、float、double等类型数据
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- 基于C++浮点数(float、double)类型数据比较与转换的详解
- float double 类型数据 精度问题
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- 深入理解C++浮点数(float、double)类型数据比较、相等判断