【问题标题】:Floating-point mantissa and exponent base 2浮点尾数和指数基数 2
【发布时间】:2020-12-20 02:50:07
【问题描述】:

我试图了解在这种情况下如何获得尾数和指数。这是我书中的一个例子。

我有这个公式(-1)^s * (1 + M) * b^E-e = x

s = 0 or 1 (the sign)
M = mantissa
b = base (In this case 2)
E = the exponent of this mantissa
e = 127 (for a 32bits system)

还是按书本,对于 x = 1.602177 * 10^-19,我得到

S = 0,

M = 0.4777474,

E = 64

它的工作原理。

1 * 1.4777474 * 2^-63 = 1.60210^-19*

但是,我不知道如何获取 ME 的值。 p>

我读到 E = log b |x|那么 M = |x|b^-E

在这种情况下 E = log2(1.602177*10^-19) = -62.43660 (我正在使用日志库 2 的网站,所以我'我不确定结果,所以我尝试了 E = -62 和 -63)。

M = (1.602177 * 10^-19) * 2^-(-62) = 0.7388737

M = (1.602177 * 10^-19) * 2^-(-63) = 1.4777474

如果我错了,请纠正我,但尾数是浮点右侧的数字。在这种情况下,0.4777474 看起来是正确的。

此时我有 E = -63 和 M = 0.4777474,但是 E 应该是 64

【问题讨论】:

  • " 在这种情况下 0.4777474 看起来是正确的。" --> 不准确。小数部分是Dyadic rational,不是 0.4777474,但可能是 4,007,636/(2^23)。

标签: python floating-point binary mantissa


【解决方案1】:

我有 E = -63 和 M = 0.4777474,但 E 应该是 64

在数学上,指数为 -63,因为 x = 1.602177 * 10^-19 在 2-63 邻域中。然而,存储的值是一个带有binary32 的 8 位无符号有偏指数。从数学指数中减去偏差 (-127) 得到偏差指数。

biased_exponent = expo - bias
64 = -63 - (-127)

【讨论】:

  • 偏差总是-127?我不知道。但是,对于 x = pi,上面的描述是行不通的。
  • @proxima 当有偏指数处于最小值/最大值时,有一些特殊的考虑。详情请查看binary32
  • 我找不到找到尾数的正确方法。我所做的对 pi 不起作用。
猜你喜欢
  • 2013-03-19
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2015-07-20
相关资源
最近更新 更多