two - path
结论1
如果将两个正规化的浮点数完成加法运算,则规格化的结果最多只需要向右移一位。
结论2
如果两数 $|\Delta E| > 1$ ,那么规格化的减法运算结果仅需要向左移动一位。
Farmwald 经过对浮点加法运算的算法进行了分析与研宄,对浮点加法算法进行了一系列的改进。
在传统浮点加法的算法中,在两个尾数完成相减时,其结果可能为负值,此时需要通过数据转换操作来将减数和被减数进行交换来避免运算结果为负值的情况。
如果两浮点数的阶码大小相等,两尾数相减的结果仍然可能为负值,因此还需要将数据进行转换。这种情况下,不需要对运算结果进行舍入处理。因为在两尾数交换的算法中,数据转换与舍入操作是处于相互排斥的,此时将其操作的加法器进行合并来减少一部分加法运算的执行时间。
在完成两个浮点数的尾数加法运算时,可能存在进位的情况,使得尾数完成运算后得到的结果的位数会增加1位,此时必须使用一个全长度的对阶移位器。
对于减法运算,可分两种情况讨论:当两浮点数的阶码差值 $|\Delta E| > 1$ 时,对于这种情况需要一个全长度的指数对阶移位器,对于运算结果的规格化处理时,仅需要将结果向左移动一位,把该路径记为;当两浮点数的阶码差值 $|\Delta E| \leq 1$ 时,在对尾数的运算结果进行规格化处理需要一个全长度的移位器,而不需要全长度的对阶移位器,把该路径记为CLOSE路径。根据上述可知浮点数的指数对阶移位器与尾数规格化处理移位器是互斥的。因此在FAR路径和CLOSE路径中仅仅需要一个全长度的移位器即可,这可进一步减少了加法运算的时间。
在进行规格化处理尾数运算的结果时,采用前导1预测算法判定移位的位数。前导1检测算法是对运算的结果进行检测前导0的数目,而前导1预测算法是将两个尾数作为输入来预测运算结果的前导0的数目。这一改进使得尾数运算操作的并行度增加,提高运算速度,又进一步的降低了算法的执行时间。
合并舍入 two - path
在1990年Quach与Flynn共同提出了根据 two - path 算法的研宄而进行改进得来的一种新型的浮点加法运算的算法。
- Quach对 two - path 算法的舍入处理操作进行了优化,使得 two - path 减少了加法运算的一部分操作。同时他还提出了利用预先就算出所有可能存在的结果,然后再对结果进行选择而得到正确的值。这样可以减少舍入处理和补码转换等操作。
- 特别是证明了对于最近舍入(RN)方式,无论是进行舍入操作还是补码转换操作,只需要计算A+B和A+B+1就可以得到所有可能的结果。通常利用混合加法器(ComAdd)技术来完成同时计算 A+B 和 A+B+1 两个结果,通过共用内部硬件的方法同时计算A+B和A+B+1以减少总体规模。得到所有可能存在的结果之后,通过对浮点数的末尾几位进行分析并结合符号位,完成正确结果的选择。这种优化方法减少了一个有效加法操作。但其代价是必须修改两条路径上有效位的加法器,以产生 A+B 和 A+B+1 。
- 对于正、负无穷舍入,还需要计算 A+B+2 。因为当…。为了完成sum+2运算,Quach与Flynn提出位于FAR路径的有效位加法器之上添加一排半加器。