本文是对下面文章的算法理解梳理,具体参看链接:前导0预测(Leading-Zero Anticipator,LZA)-CSDN博客
1. 基础算法
n 、z 、p 代表负(negative,-1)、零(zero,0)、正(positive,+1),{1,0,-1}数字字符集
1.1 A>B 的情况
,表示k个0,p表示一个+1,x表示不确定是{1,0,-1}中的哪一个。
1. 此种情况下,即使x为负时,向前借位会在k+2位的p处结束、k+1必定仍然为p,因此前导共有k个0,例如A为01100,B为00010时,R为011(-1)0;
2.此种情况下,若x为负时,需要向前借位、k+2位的z变为p、k+1位的p变为z、此时前导共有k+1个0,例如A为01000、B为00010时、R为010(-1)0;若x为正,不需要借位、此时第一个p在k+1位置、前导共有k个0例如A为01010、B为00010时、R为010(0)0。
这种情况下,通过检测R的码型无法确定第一个P的位置,因此结果带有不确定性,因此先假设第一个p在K+1位置(即不需要借位的情况),之后根据A-B的真实结果再纠错。
3.此种情况下,若仅将前面k+j+1位进行借位化简(后面的位不考虑),则得到
,此时R序列变为z(k+j) p (p or z) (x)的情况(即上述情况1和情况2),那么序列中首个p出现在k+j+1或者k+j+2的位置,原因与情况2想同;
在A > B时总结出的情况如下表所示: