浮点数如何比较是否相等

Python013

浮点数如何比较是否相等,第1张

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

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

如:

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

}

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

备注:

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

2、DBL_EPSILON用于double类型。

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

方法1: 比较 f1,f2 不相等 返回0,相等 返回 1:int comp_eq (float f1, float f2){if ( (f1>f2) || (f2 >f1) ) return 0 else return }方法2: f1,f2 之差的绝对值 小于 EPS, 认为2者相等。#include <math.h>float f1,f2,EPS = 1E-06int comp_eq2 (float f1, float f2, float EPS){if ( fabs(f1,f2) <EPS) return 1 else return 0}

虽然比较两个数相等要用等于号,但是,由于计算机上的浮点数存储的规则的限制,导致数据的比较上要考虑浮点数的精度问题. 所以, 如果你允许数据的偏差在 0.001的话,那么,你可以if ( a - b <0.001) 认为a=b当然,这个偏差本身是浮点数,所以,按照IEEE754的标准,但精度浮点数有效位最多小数点后7位。而双精度则是最多小数点后15位。因此,你指定的这个偏差要是“合理”的才行。 你使用浮点数来保存数值,并不表示你的业务上来的数据就肯定是7位精度,很可能是3位的精度,就比如我上面给你的例子,千分之一的精度。当两个浮点数的差在我们可接受的精度范围内时,便可认为它俩是相等的。这似乎有点像模糊数学的相等啊,比如3.24我可以近似认为是3.2,他们的差在0.05内。 如果你是编成的初学者,可以忽略我上面的回答,暂时使用 等于号比较即可。比如,C语言里的等于是 ==。只是,在某些情况下,虽然表面上看两个浮点数是一样的,但计算机会判断它们是不一样的,这个原因就是我上面回答的内容。