我试图找到这个问题的答案,但是唯一的其他线程并没有提供我希望的那么多细节。
为什么在修改的展位算法中需要LSB
的额外0?
它到底是什么,为什么需要是0而不是1?
我知道您在radix-4修改的展位算法(或一般IIRC(中的输入需要均匀数量。
,但是添加的0不能只有在那里,以便我们有一个可以将3,对3,对
假设我们必须乘以 a× b ,其中 b =(b n-1 ... b 1 b 0 (
展位在其标准版本或修改版本中,通过重写术语 b i 。
让我们看一下更简单的标准展位。
如果 b b 不变的 value ,重写是正确的。
如果 b 在两个补充中编码,则其价值为
b =&minus; b n-1 &times; 2 n-1 &sum; <sub;> i = 0 n-n-1 b i &times; 2 i
请注意,由于两人的补充编码,重量 n-1 的负重。
现在,重写包括将每个 b i 更改为 b' i = b i &减去; b
如果我们现在说
b =&sum; i = 0 n-1 b' i &times; 2 i em>
通过替换 b' i b i &minus; b i-1 ,很容易看到在这种表达中, b 的值是不变的,只要对于 i = 0 ,我们添加了额外的位 b i--1 = 0
当然,我们可以为 i = 0 :
添加一个特殊规则如果 i&ne; 0 , b' i = b i &minus; b i-1 em>
否则 b' i = b i
但是,展位算法的主要初始动机是通过正则表达式替换两个n-1 n-1 的特定情况。独立于 i 。
的确,在设计电路时,仅复制操作员要比必须根据位位置考虑特定条件要容易得多。因此,最好的解决方案是在LSB上添加额外的位置。
对于修改的展位,情况相似。
我们尝试用数字重写 b b'' 2i 以
的方式 b =&sum; i = 0 n/2-1 b''' 2i &times; 2 2i
重写的基础为4,表达式更为复杂,要生成数字 b'''我们需要考虑到BITS B
这是相应的真实表。
b_2i+1 b_2i b_2i-1 | b''_2i
-----------------------------------
0 0 0 | 0
0 0 1 | 1
0 1 0 | 1
0 1 1 | 2
1 0 0 | -2
1 0 1 | -1
1 1 0 | -1
1 1 1 | 0
可以证明,这种方式, b 的数值不变,提供了我们在重量-1 b -1 = 0 。实际上, b'' 2i =&minus; 2&times; b
同样,我们可以以不同的方式考虑 i = 0 的情况,并说 b'' 0 =&minus; 2&times; b
所以回答您的问题:
谁能告诉我为什么在修改的展位算法中需要LSB的额外0?
此额外的一点简化了重写算法,并避免在 i = 0
时要处理特定情况。它到底是什么,为什么需要是0而不是1?
如果这个位是一个,我们将无法在重写后具有不变的值。这对于确保乘法算法的正确性至关重要。