首页 >后端开发 >C++ >为什么我的浮点比较会产生意外结果?

为什么我的浮点比较会产生意外结果?

Patricia Arquette
Patricia Arquette原创
2024-12-25 02:20:09315浏览

Why Does My Floating-Point Comparison Produce Unexpected Results?

浮点比较差异

在提供的代码片段中:

int main()
{
    float a = 0.7;
    float b = 0.5;
    if (a < 0.7)
    {
       if (b < 0.5) printf("2 are right");
       else         printf("1 is right");
    }
    else printf("0 are right");
}

“0”的预期输出是正确”没有获得。相反,会打印“1 is right”。这种差异是由于浮点数固有的不精确性造成的。

当与浮点操作数进行比较时,它们会自动提升为双精度值。浮点数不如双精度数精确,可能无法准确表示预期值。在这种情况下,当 a(浮点型)与 0.7(双精度型)进行比较时,a 在内部转换为双精度型并失去精度。这导致a略小于0.7,导致a<1。 0.7 比较评估结果为 true。

要解决此问题,可以:

  • 将 float 更改为 double:
double a = 0.7;
double b = 0.5;
  • 使用带“f”的浮点文字后缀:
float a = 0.7f;
float b = 0.5f;

两种方法都确保操作数保持为浮点数,并避免提升为双倍期间的精度损失。

以上是为什么我的浮点比较会产生意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn