c/c++语言开发共享C浮点和双重比较

我在比较C中的简单浮点数和双精度数,特别是两者的值8.7。 现在我为每个变量分配8.7,当我打印时,我得到两个值的8.7000的结果。 为什么编译器添加了这些零。 我想问的主要问题是还有任何我没有看到的数字,如隐藏在尾随零之后的数字。 我读到由于缺乏精确度,我不应该使用float进行这样的比较,但是我认为它具有如此小的值,它确实可以存储8.7,并且需要一定程度的精确度来与另一个8.7值进行比较?

我唯一担心的是它实际上是在内存中的某个位置表示为例如8.70000003758或其他东西,这会让我的比较失败? 我试图使用%.20f打印f以查看可能隐藏的任何其他数字,但我认为只是创建了数字,否则不存在,因为数字的整体精确度变为8.6918734634834929或类似的东西。

    我在比较C中的简单浮点数和双精度数,特别是两者的值8.7。

    糟糕的选择,因为8.7没有精确的二进制表示。

    现在我为每个变量分配8.7,当我打印时,我得到两个值的8.7000的结果。 为什么编译器添加了这些零。

    它还没有,你的打印程序有。

    我想问的主要问题是还有任何我没有看到的数字,如隐藏在尾随零之后的数字。

    当然,因为8.7没有精确的二进制表示。 (尝试将其写为2的整数幂的总和,你不能这样做。)

    我读到由于缺乏精确度,我不应该使用float进行这样的比较,但是我认为它具有如此小的值,它确实可以存储8.7,并且需要一定程度的精确度来与另一个8.7值进行比较?

    你错了。 1/3很小但没有具有有限位数的精确十进制表示。 值是大还是小与它是否可以用特定基数中的有限位数精确表示无关。

    我唯一担心的是它实际上是在内存中的某个位置表示为例如8.70000003758或其他东西,这会让我的比较失败?

    确切地说,就像0.333333333代表1/3一样。

    我试图使用%.20f打印f以查看可能隐藏的任何其他数字,但我认为只是创建了数字,否则不存在,因为数字的整体精确度变为8.6918734634834929或类似的东西。

    那可能只是一个bug。 向我们展示代码。 也许你试图输出一个双重而遗漏了l

      以上就是c/c++开发分享C浮点和双重比较相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519455.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐