解释减去浮点数 1.0 - 1.0 的步骤

Explain the steps of subtracting the floating-point numbers 1.0 - 1.0

提问人:user3869810 提问时间:6/14/2023 最后编辑:user3869810 更新时间:6/14/2023 访问量:68

问:

我正在写减去浮点数 1.0 - 1.0 的论文。

我将指数对齐,然后减去尾数。这是零,我的结果是 1.0。显然,结果应该是 0。如果我不能将尾数归一化为 0,没有位可以移动,这怎么可能?


  1. 指数是对齐的: 0x7F, 0x7F

  2. 减去两个尾数:

0x800000 - 0x800000 = 0

  1. 归一化结果:

尾数是0x0,尾数中没有位可以向左或向右移动以正常化。

  1. 结果

指数:0x7F 尾数: 0x0

1.0

数学 浮点 精度

评论

0赞 Yunnosch 6/14/2023
请详细说明您是如何做到这一点的。只有这样,才能向您指出任何潜在的错误。
0赞 user3869810 6/14/2023
我为我的问题添加了更多细节。
0赞 Yunnosch 6/14/2023
那里有些不对劲。我假设你给出结果,因为你有以该结果结尾的代码;因为根据我的理解,如果尾数为 0,则值为 0。请展示该代码 - 或解释您自己如何从 mantissa 0 提出最终的 1.0。1.0
0赞 user3869810 6/14/2023
我正在纸上做这件事。如果尾数为零,则仅表示小数点后的所有内容均为零,但指数仍0x7F这是由何而来。我假设如果我对尾数进行归一化,那么我将不得不减少外延网,但如果尾数为 0 并且没有位可供我移动,我该怎么办。1.0
0赞 Eric Postpischil 6/14/2023
你似乎在用别的东西来解释“指数:0x7F尾数:0x0”是一个浮点数,而其他东西给你1。也许是某个软件,也许是一本书。您应该更新问题以明确这一点。

答:

2赞 Eric Postpischil 6/14/2023 #1

使用表示浮点数的位而不是使用数学形式 ±F•b e 来处理浮点数是很尴尬的,其中 b 是固定基数(二进制浮点为 2),e 是指定范围内的整数, F 是固定长度和范围的基 b 数字。F 称为有效。1

在数学形式中,1.0 是 +1.000...000•20,减去 +1.000...000•20 从 +1.000...000•20 产出 +0.000...000•20(指数无关紧要),当我们以 IEEE-754 单精度格式 (binary32) 对 int 进行编码时,我们得到位 0000...0000(符号位 0,指数字段 0000000,有效字段 0000...0000).

如果你打算直接使用这些位,你必须为此开发算法的更多细节。获得结果后,必须对其进行正确编码。对 binary32 数字进行编码的规则包括:

  • 如果有效位以 1 开头,则尾随位(1 之后的所有位)存储在有效位字段中,指数字段设置为 127+e
  • 如果有效位以 0 开头,则尾随位存储在 significand 字段中,指数字段设置为 0。

因此,由于您的有效值为 0,因此应将指数字段设置为 0。

脚注

1 “有效”是浮点表示的分数部分的首选术语。“尾数”是对数分数部分的旧术语。有效是线性的。尾数是对数的。

评论

0赞 user3869810 6/14/2023
在网上看到的大多数文章都给出了使用位表示的步骤。你能把你的示例扩展到使用位吗?
0赞 President James K. Polk 6/14/2023
@user3869810:我会请他不要这样做,因为他的回答更好。
0赞 user3869810 6/14/2023
@PresidentJamesK.Polk:他的回答很好,但我仍然希望看到一种像我在纸上所做的那样使用这些位的方法。
0赞 Spektre 6/14/2023
是的,非正态和零浮点表示是答案 +1 ,但是你的名字混淆了,我会称它或类似的东西,不要与 MSB/LSB 的东西混淆......significant fieldstored mantissasign bit
1赞 Spektre 6/15/2023
@user3869810 see performing floating point addition algorithmically its part of what Eric had in mind and also look at the first link in that answer which contains the NaN/Inf detection and decomposition/reconstruction of float/double to/from compounds (sign,man,exp)