Skip to content Skip to footer

浮点数的相等性判断

在编程中,浮点数(如 C/C++ 中的float、double,Python 中的float)的赋值和相等性判断需要特别注意。

因为浮点数在计算机中是近似表示的,直接使用==判断相等可能导致逻辑错误。

一、浮点数的相等性判断

禁止直接使用== 或===判断两个浮点数是否相等,因为精度误差会导致意外结果。

#include

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

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;

}