浮点数的相等性判断

在编程中,浮点数(如 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;
}
posted @ 2025-10-12 12:19  开心猪扒  阅读(20)  评论(0)    收藏  举报