【问题标题】:How do I round this binary number to the nearest even如何将此二进制数四舍五入到最接近的偶数
【发布时间】:2016-05-09 21:50:35
【问题描述】:

我有0.1 的二进制表示:

0.00011001100110011001100110011001100110011001100110011001100110

我需要将它四舍五入到最接近的位置,以便能够将其存储在双精度浮点中。我似乎无法理解如何做到这一点。大多数教程都在讨论保护位、圆形位和粘性位 - 它们在这个表示中的什么位置?

我还找到了以下解释:

让我们看看 0.1 在双精度下是什么样子的。首先,我们来写 它是二进制的,被截断为 57 个有效位:

0.000110011001100110011001100110011001100110011001100110011001…

第 54 位及以上的总和大于位值的一半 第 53 位,因此向上取整

0.0001100110011001100110011001100110011001100110011001101

这个不讨论 GRS 位,为什么?他们不是总是需要的吗?

【问题讨论】:

    标签: binary floating-point rounding


    【解决方案1】:

    您引用的文字来自我的文章Why 0.1 Does Not Exist In Floating-Point。在那篇文章中,我展示了如何手动进行转换,“GRS”位是 IEEE 实现细节。即使您使用计算机进行转换,也不必使用 IEEE 算法 (and you shouldn't if you want to do it correctly),因此 GRS 位也不会在那里发挥作用。无论如何,GRS 位适用于计算,而不是真正适用于转换的概念。

    【讨论】:

    • 那么如何在没有 GRS 位的情况下舍入一个无限数?
    • 我现在也在写一篇详细的文章,为什么 0.1 + 0.2 不等于 0.3 在 medium 上,你觉得写完可以看看吗?
    • 你应该花时间做一些关于这个主题的研究(特别是我的网站有很多关于转换的文章。)。另外,你真正在寻找什么?你想知道如何手动转换吗?用机器?您想了解 IEEE 算法的工作原理吗?
    • 您可能还想在撰写文章之前搜索“0.1 + 0.2 不等于 0.3”。 (0.30000000000000004.com 是解决它的众多网站之一)。
    • 我看到很多网站都在谈论这个问题,但是你看,在阅读了它们之后,我仍然需要去 stackoverflow 并发布类似这样的问题。我将写一篇文章,深入探讨所有这些主题。我已经花了很多时间来理解这一点,而且我真的很接近完全理解,四舍五入是最后一步:)。我已经学习了很多主题——将分数转换为二进制,IEEE754 浮点数是如何存储的——现在只剩下四舍五入了
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多