python如何比較兩個浮點數是否相等?
相關推薦:《python影片》
float 類型不能比較相等或不等,但可以比較>,<,>=,<=
用==從語法上說沒錯,但是本來應該相等的兩個浮點數由於計算機內部表示的原因可能略有微小的誤差,這時用==就會認為它們不等。應該使用兩個浮點數之間的差異的絕對值小於某個可以接受的值來判斷判斷它們是否相等,比如用
if (fabs(price - p) < 0.000001)
來代替
if (price == p)
很多工程的應用都是採用計算精確度的方式
定義一個精度,用差的絕對值比較,在精度範圍內就認為是相等的;大小可以直接比較。
不可將浮點變數以「==」或「!=」與任何數字比較。
千萬要留意,無論是float 還是double 類型的變量,都有精確度限制。所以一定要
避免將浮點變數用「==」或「!=」與數字比較,應該設法轉換成「>=」或「<=」形式。
假設浮點變數的名字為x,應將
if (x == 0.0) // 隱含錯誤的比較
轉換為
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON 是允許的誤差(即精度)。
計算機表示浮點數(float或double類型)都有一個精度限制,對於超出了精度限制的浮點數,計算機會把它們的精度之外的小數部分截斷。因此,本來不相等的兩個浮點數在計算機中可能就變成相等的了。例如:
float a=10.222222225,b=10.222222229
數學上a和b是不相等的,但在32位元計算機中它們是相等的。
如果兩個同符號浮點數之差的絕對值小於或等於某一個可接受的誤差(即精確度),就認為它們是相等的。
不要直接用「==」或「!=」對兩個浮點數進行比較,但是可以直接用「<」和「>」比較誰大誰小。
#include #include #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 } return 0; }
以上是python比較兩浮點數是否相等的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!