所以我有点无助。我想我知道如何在IEEE-754上加法,但是我在减法方面有很大的问题。我有种感觉,我的想法是正确的,但我想和你们核实一下。
我们有以下两个IEEE-754号:
x: 0 1000 0010 100 1000 0000 0000 0000 0000
y: 0 1000 0011 010 1001 0000 0000 0000 0000因为我们必须要正数,我们想要减去它们,我的想法是取y,反演尾数,然后计算。
x+(-y)
一位导师告诉我,这是不正确的,我必须保持数字的正数,并减去它们。他怎么没告诉我。
有人能告诉我什么是正确的方法吗?
我的想法是用x-y的方式:
。
发布于 2021-03-09 18:30:54
OP的1-2-3想法大部分都在轨道上,但可能错过了隐含的部分。
1对隐含位进行解释。
s eeee eeee mmm mmmm mmmm mmmm mmmm mmmm
x: 0 1000 0010 100 1000 0000 0000 0000 0000
y: 0 1000 0011 010 1001 0000 0000 0000 0000
s eeee eeee immm mmmm mmmm mmmm mmmm mmmm
x: 0 1000 0010 1100 1000 0000 0000 0000 0000
y: 0 1000 0011 1010 1001 0000 0000 0000 00002调整较小的数量级,形成一个共同指数。(增量博览会,移位“尾数”)
s eeee eeee immm mmmm mmmm mmmm mmmm mmmm extra bits
x: 0 1000 0011 110 0100 0000 0000 0000 0000 0
y: 0 1000 0011 1010 1001 0000 0000 0000 00002.5如果符号有点不同,翻转第二个,并执行一个加法。然而,既然在这种情况下,没有什么可做的。
3从较大处减去较小的部分。
s eeee eeee immm mmmm mmmm mmmm mmmm mmmm
y: 0 1000 0011 1010 1001 0000 0000 0000 0000
x: 0 1000 0011 110 0100 0000 0000 0000 0000 0
d: 0 1000 0011 0100 0101 0000 0000 0000 0000 04调整MSbit为隐含1(移位尾数,递减指数)。
s eeee eeee immm mmmm mmmm mmmm mmmm mmmm
d: 0 1000 0010 1000 1010 0000 0000 0000 00005倒排减法。(翻转标志)
s eeee eeee immm mmmm mmmm mmmm mmmm mmmm
d: 1 1000 0010 1000 1010 0000 0000 0000 00006回合-在这种情况下没有价值变化。
s eeee eeee immm mmmm mmmm mmmm mmmm mmmm
d: 1 1000 0010 1000 1010 0000 0000 0000 00007删除隐含位,形成编码结果。
s eeee eeee mmm mmmm mmmm mmmm mmmm mmmm
d: 1 1000 0010 000 1010 0000 0000 0000 0000不-a-数字、次法线、溢出、无穷大和舍入的细节为了简洁而省略.
注IEEE-754使用“重要”,而不是“尾数”。
发布于 2021-03-09 18:18:13
所有产生正确结果的方法都是正确的。舍入可能更容易处理,从较大的值减去较小的绝对值,并相应地调整符号位。而且,使用正数只会使在1<<23中处理(可选的)隐式数字稍微容易一些。对于负值,数字需要为0xff800000。其他一些特殊情况也会出现在负正态分布上。
https://stackoverflow.com/questions/66552267
复制相似问题