我正在尝试为 picoblaze 微 Controller (1 个符号位、4 个指数位和 3 个尾数位)编写二进制 8 位浮点加法算法
我知道它可以处理正数,但是当也有负数时我不知道该怎么做。
我的主要问题是设置结果的符号位,有人可以解释如何正确设置吗?
我的想法是检查两个数字的符号;然后,如果它们都是正数,则将符号设置为 0,如果它们都是负数,则将符号设置为 1,并使用与之前相同的方法进行加法运算,如果一个为负,一个为正,则比较数字并使用较大数字的符号位,但我不确定如何比较这两个数字并且代码变得有点困惑,有没有更好的方法来做到这一点?
最佳答案
通常(忽略像 NaN 这样的东西),对于 A = B + C
:
如果
C
量级大于B
, 交换B
和C
这样你就知道B
必须具有“大于或等于”的大小。 注意:幅度忽略符号位(例如,-6 的幅度大于 +4,因为 6 > 4)。如果
B
和C
有不同的符号,否定C
并做subtract_internal
;否则做add_internal
.subtract_internal
,忽略符号位,减去幅度(不要忘记B
必须具有“大于或等于”幅度),然后设置A
的符号等于B
之一的符号或C
(无论如何,它们将具有相同的符号)。add_internal
,忽略符号位,加上幅度,然后设置A
的符号等于B
之一的符号或C
(无论如何,它们将具有相同的符号)。
另外,一般来说(忽略像 NaN 这样的东西),对于 A = B - C
:
如果
C
量级大于B
, 交换B
和C
并否定它们(例如A - C == (-C) - (-A)
)以便您知道B
必须具有“大于或等于”量级。如果
B
和C
有不同的符号,否定C
并做add_internal
;否则做subtract_internal
.
关于assembly - 浮点加法汇编算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56674027/