在编程中,浮点数(如 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.300000printf("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.300000if(a - b <= 0.0001){printf("a = b \n");}else{printf("a != b \n");}return 0;
}