double类型与零值比较时不能用==和!=,但>=和<=可以吗?

如题所述

可以用>=和<=进行比较的。

浮点数(double)之所以不能用 == 和 != 是因为浮点数在内存中都是按精度来存储的,所以看到的 3.12也许本来是3.123456取的小数点后2位位精度,所以当与另一个 3.12进行比较时可能会出现很多种情况,如果另一个3.12其实是3.121111取的小数点后2位位精度的话,那么两个数看着相等,其实是不等的。

所以办在对浮点数进行比较的时候一般都是相减然后去和一个精度比较。

扩展资料:

C++中的浮点数有6种,分别是:

float:单精度,32位

unsigned float:单精度无符号,32位

double:双精度,64位

long double:高双精度,80位

然而不同的编译器对它们的支持也略有不同,据我所知,很多编译器都没有按照IEEE规定的标准80位支持后两种浮点数的,大多数编译器将它们视为double。

参考资料来源:百度百科-浮点数 (有理数)

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-08
可以用>=和<=进行比较的。
浮点数(double)之所以不能用 == 和 != 是因为浮点数在内存中都是按精度来存储的,所以你看到的 3.12也许本来是3.123456取的小数点后2位位精度,所以当与另一个 3.12进行比较时可能会出现很多种情况,如果另一个3.12其实是3.121111取的小数点后2位位精度的话,那么两个数你看着相等,其实是不等的。
所以你办在对浮点数进行比较的时候一般都是相减然后去和一个精度比较。
例如:
a=3.12; b=3.13;
当a和b比较时就应该:
#define N 0.0001
if(a-b<N)
就说明a小于b;.
而不是直接去比较 if( a<b)本回答被提问者和网友采纳
第2个回答  2012-07-23
语法上说,都可以。
double x=0.0;
if (x == 0.0 ) printf("yes == zero\n");
if (x != 0.0 ) printf("x != zero\n");else printf("yes == zero\n");

if (x >= 0.0 ) printf("x >= zero\n");else printf("x < zero\n");
if (x <= 0.0 ) printf("x <= zero\n");else printf("x > zero\n");

---
比较两个double 是否相等,通常用
#include <math.h>
if (fabs(x - y) < eps) 则相等. eps 为允许误差,例如 1e-10
因为double 只有 32 位,有效数字 14 位10进制,含有截断误差。
相似回答