我正在尝试开发一个FPU(符合ieee 754)作为毕业项目,我在sum函数方面遇到了一些麻烦。在过去的两周里,我正在调查并在纸上进行一些操作(其中很多),目的是了解这个标准是如何工作的。 所以,这是一个问题....我很困惑,因为当我用相同的符号执行数字添加时,我得到了正确的结果但是在添加符号相反的数字时我遇到了问题。例如,添加-1200.23和500.125。 ieee 754-2008数字的单精度表示是(符号位---指数----有效数字):
-1200.23 = 1 --- 10001001 --- 1.001 0110 0000 0111 0101 1100
500.125 = 0 --- 10000111 --- 1.111 1010 0001 0000 0000 0000
对于-1200.23,指数为137,对于500.125,指数为135。指数不相等所以我们需要将500.125的有效数归一化,为此我向右移两次有效数(137-135 = 2)。 500.125的新尾数是:
0.011 1110 1000 0100 0000 0000
***继续之前我想说我见过类似的问题(How to subtract IEEE 754 numbers?它没有回答我的问题*****
那么,下一步是添加有效数字还是减去有效数字?我试过两种方式,但我的结果仍然不正确...... 感谢.....
答案 0 :(得分:0)
这些数字是符号幅度(一旦指数对齐)和不是两个补码。
如果它们有不同的符号,则添加作为一个整体,你必须从较大的移位的有效数字中减去较小的相应地调整符号,取决于哪个具有更大的幅度。然后规范化结果。
如果从较小的中减去较大的值,则会得到一个错误的,两个补码的结果,你必须否定这个结果,并在必要时转移,以使其再次为正,这将是太多不必要的工作。
如果您添加两个移位的有效数字,那么您肯定无法获得所需内容,就像-4.1 + 3.2
既不会导致7.3
也不会导致-7.3
1}}。它变为-(4.1 - 3.2)
或-0.9
。
换句话说,幅度是通过从较大的3.2
4.1
中减去较小的符号来确定的,而较大的符号则减去符号(在这种情况下,-
)。
也不要忘记处理(在处理之前添加并在之后删除)某些格式的隐藏位。并注意正确处理NaN和非正规。
不要向右移动以对齐。那样你就会失去一些东西。向左移动以对齐有效位数并稍后进行标准化。中间结果可能更大,但这可以通过归一化和适当的舍入来纠正。