两个float数的比较大小以及浮点数是否和0相等
2014-04-24 22:49
561 查看
两个float数的比较大小以及浮点数是否和0相等
计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在计算机中可能就变成相等的了。例如:
float a=10.222222225,b=10.222222229
数学上a和b是不相等的,但在32位计算机中它们是相等的。
如果两个同符号浮点数之差的绝对值小于或等于某一个可接受的误差(即精度),就认为它们是相等的。
不要直接用“==”或者“!=”对两个浮点数进行比较,但是可以直接用“<”和“>”比较谁大谁小。
两个float数的比较大小以及浮点数是否和0相等
计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在计算机中可能就变成相等的了。例如:
float a=10.222222225,b=10.222222229
数学上a和b是不相等的,但在32位计算机中它们是相等的。
如果两个同符号浮点数之差的绝对值小于或等于某一个可接受的误差(即精度),就认为它们是相等的。
不要直接用“==”或者“!=”对两个浮点数进行比较,但是可以直接用“<”和“>”比较谁大谁小。
//test.cpp //**************************************** #include <stdio.h> #include <math.h> #define EPSILON 1e-6 int main(void) { float a = 0.000003; float b = 0.000005; printf("a=%f/n",a); printf("b=%f/n",b); printf("abs(a-b)=%f/n",abs(a-b)); printf("fabs(a-b)=%f/n",fabs(a-b)); if ( fabs(a-b) <= EPSILON ) //判断浮点数是否相等 { printf("a==b/n"); }else { printf("a!=b/n"); } if ( fabs(a) <= EPSILON) //判断浮点数是否等于0 { printf("a==0/n"); }else { printf("a!=0/n"); } if (a > b) //比较两个浮点数的大小, { printf("a>b/n"); }else { printf("a<b/n"); } return 0; } //****************************************
相关文章推荐
- 判断两个(float)变量x,z是否相等 以及和0值比较方法
- 判断两个( float )变量是否相等以及和 0 值比较方法
- 判断两个(float)变量x,z是否相等 以及和0值比较方法
- 为什么两个不确定值的浮点数无法直接比较是否相等
- 如何比较浮点数(float&double)是否相等?
- PHP Float 永远不要比较两个浮点数是否相等
- VC++ 比较两个字符串是否相等,字母大小写相关。
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- Java 比较两个 List 的值是否相等
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- 比较两个 List 的值是否相等
- 比较两个字符串是否相等
- Shell脚本 字符串大小比较 字符串是否相等比较 字符串是否为空判断
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- 比较两个数字是否相等
- 比较两个Json对象是否相等
- js比较两个数值是否相等
- ES6中Object.is方法比较两个值是否相等
- Shell脚本 字符串大小比较 字符串是否相等比较 字符串是否为空判断
- JS比较两个数组是否相等 是否拥有相同元素