C语言double值一样系统却判断不相等,求解??

C语言double值一样系统却判断不相等,求解??,第1张

double值在计算机中用的64个bit来表示,浮点数格式,因为精度比较高,所以显示给你看的时候,通常都是经过舍弃精度(简单理解成四舍五入),你看到的200000和2000000很可能真的不一样,所以比较好的做法是,当两个double数,相差不超过00000001的时候,就认为他们是一样的。

int类型
if(a==b)
{

}
float 或者double的话
对浮点数比较大小时不要使用==

本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。应该使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等,比如用

char ch;

scanf("%c",&ch);
switch(ch)

{

case 'A':

break;

case 'B':

break;

default:

};

由于浮点数伴随着无法精确表示而进行近似或舍入,处理器是32位还是64位都会导致浮点数值不一样,所以浮点数不能够使用 == 来判断两个浮点数是否相等。

浮点数比较应该通过fabs方法算出两个浮点数间的绝对值,再判断是否在设定的精确度范围内,如果在,则表示相等,否则不相等。

如:

if(fabs(a-b)< 精确度){

}

精确度可以自己设定,设:00001;也可以使用oc中的宏(FLT_EPSILON)

备注:

1、FLT_EPSILON用于float类型。它是满足 x+10不等于10的最小的正数。

2、DBL_EPSILON用于double类型。

3、abs 方法用于整型间的绝对值。

大小直接比较,
相等比较他们的差值在一定的误差范围内就认为是相等了。
比如:double
d1,d2;
const
double
d
=
00001;
if(d1
-
d2
>
-d
&&
d1
-
d2
<
d);
认为d1与d2相等,否则不相等


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12873802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存