浮點數的相等性判斷
在編程中,浮點數(如 C/C++ 中的float、double,Python 中的float)的賦值和相等性判斷需要特別注意。
因為浮點數在計算機中是近似表示的,直接使用==判斷相等可能導致邏輯錯誤。
一、浮點數的相等性判斷
禁止直接使用== 或===判斷兩個浮點數是否相等,因為精度誤差會導致意外結果。
#include <stdio.h>
int main()
{
float a = 0.1f + 0.2f;
float b = 0.3f;
printf("a = %f, b = %f\n", a, b); // 輸出可能為 a=0.300000, b=0.300000
printf("a == b ? %d\n", a == b); // 實際輸出 0(不相等)!
return 0;
}
原因:
0.1 + 0.2的計算結果因二進制精度誤差,實際存儲值為0.3000000119,而0.3的存儲值為0.2999999821,兩者并不完全相等,導致==判斷失敗。
二、正確的判斷方法:比較差值是否小于閾值
判斷兩個浮點數是否 “足夠接近”(在可接受的誤差范圍內),而非完全相等。步驟:
- 計算兩個浮點數的絕對差值。
- 判斷差值是否小于一個極小的閾值(如1e-6,根據精度需求調整)。
#include <stdio.h>
int main()
{
float a = 0.1f + 0.2f;
float b = 0.3f;
printf("a = %f, b = %f\n", a, b); // 輸出可能為 a=0.300000, b=0.300000
if(a - b <= 0.0001)
{
printf("a = b \n");
}
else
{
printf("a != b \n");
}
return 0;
}

浙公網安備 33010602011771號