【问题标题】:First (smallest) even number not representable with IEEE 754 floating point?第一个(最小的)偶数不能用 IEEE 754 浮点表示?
【发布时间】:2016-02-09 14:10:45
【问题描述】:

我不确定如何解决这个问题。

我知道 IEEE 754 无法表示的最小整数是 2^(mantissa+1) + 1,但我该如何获取该信息并将其更改为偶数?

我曾考虑过最大化尾数位,然后按 2 倍缩放,但这是否正确?

【问题讨论】:

  • 我想你的意思可能是 2**number_of_mantissa_bits+1?对于偶数,您获得一个二进制数,因此 2**(number-of-mantissa-bits+1)+2。
  • @njuffa 那么这是最小的偶数吗?这对我来说完全有意义,但出于某种原因,我们的 cs 课程有 2^(mantissa + 2) + 2,知道为什么吗?或者这是一个错字?
  • 好吧,你是怎么计算 number_of_mantissa_bits 的?是只计算 IEEE-754 编码中的位数,还是计算有效尾数位数,即编码(小数)位隐式(隐藏)整数位?
  • 只有尾数位数,这就是为什么它让我感到困惑@njuffa
  • @ylun.ca 如果您只计算 IEEE-754 格式编码的尾数位数,并带有隐式整数位,则无法准确呈现的最小整数为 2**(number_of_mantissa_bits+ 1)+1。正如您的课程资料所述,无法精确表示的最小偶数是 2**(number_of_mantissa_bits+2)+2。您可以通过查看每个 binade 中编码数字之间的最小间距来轻松地为自己澄清这一点。或者您可以使用 IEEE-754 单精度操作数检查蛮力。

标签: floating-point precision ieee-754


【解决方案1】:

仅将 2 加到 2 ** (num_mantissa_bits) 是不够的,因为尾数中的最后一位将完全代表您添加的两个。

相反,计算2 ** (num_mantissa_bits + 1) + 2

这是一个让所有位可见的 Python 会话:

>>> (2.0 ** 53).hex()
'0x1.0000000000000p+53'
>>> (2.0 ** 53 + 2.0).hex()
'0x1.0000000000001p+53'
>>> (2.0 ** 54).hex()
'0x1.0000000000000p+54'
>>> (2.0 ** 54 + 2.0).hex()
'0x1.0000000000000p+54'

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 1970-01-01
    • 2011-04-22
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多