提问人:user3869810 提问时间:6/14/2023 最后编辑:user3869810 更新时间:6/14/2023 访问量:68
解释减去浮点数 1.0 - 1.0 的步骤
Explain the steps of subtracting the floating-point numbers 1.0 - 1.0
问:
我正在写减去浮点数 1.0 - 1.0 的论文。
我将指数对齐,然后减去尾数。这是零,我的结果是 1.0。显然,结果应该是 0。如果我不能将尾数归一化为 0,没有位可以移动,这怎么可能?
指数是对齐的: 0x7F, 0x7F
减去两个尾数:
0x800000 - 0x800000 = 0
- 归一化结果:
尾数是0x0,尾数中没有位可以向左或向右移动以正常化。
- 结果
指数:0x7F 尾数: 0x0
1.0
答:
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 field
stored mantissa
sign 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)
下一个:复数显示为非常小的小数
评论
1.0
1.0