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

为什么在 C 中比较浮点数有时会产生意外的结果?

Linda Hamilton
发布: 2024-12-19 04:18:09
原创
494 人浏览过

Why Does Comparing Floats in C   Sometimes Produce Unexpected Results?

了解 C 中的浮点比较

在比较 C 中的浮点值时,重要的是要意识到由于其精度有限。在提供的代码片段中,当将浮点数 a 和 b 分别与常量 0.7 和 0.5 进行比较时,观察到意外输出“1 is right”。

意外输出的原因:

出现此问题的原因如下原因:

  • 隐式类型转换:将 float 与 double 进行比较(例如,if (a
  • 浮点精度有限:浮点的精度低于双精度,这意味着它们可以准确表示更少的小数位。因此,浮点型 0.7 可能与双精度型 0.7 不完全相同。
  • 常数的精确表示:像 0.5 这样的 2 的幂的常数可以精确表示为浮动和加倍。因此,b<1。即使 b 是稍微不准确的浮点数,0.5 仍然为 false。

分辨率:

要获得预期输出,您可以:

  • 使用双精度数:将变量 a 和 b 更改为双精度数(double a = 0.7; double b = 0.5;).
  • 使用浮点文字: 修改常量为浮点文字 (if (a

具有预期输出的代码:

int main()
{
    double a = 0.7;
    double 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");
}
登录后复制

在此更正的代码中,a 和 b 的比较它们各自的双精度确保准确的精度,从而产生预期的输出“0 是正确的。”

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板