J.1 引言
计算机算术有时被视为 CPU 设计中一个专门的分支,但它的重要性不容忽视。1994 年,Intel 的 Pentium 芯片被发现存在除法算法缺陷,这件事让 Intel 深切体会到这一点。这个浮点运算缺陷不仅招致大量负面报道,也给公司造成了巨额损失。Intel 为更换有缺陷的芯片,计提了 3 亿美元的损失。
本附录将研究一些基本的浮点算法,其中包括 Pentium 所采用的除法算法。虽然人们为浮点加速器提出过种类繁多的算法,实际实现通常仍建立在本附录介绍的少数基本算法之上,只是加以改进或变化。除选择加、减、乘、除算法外,计算机体系结构设计者还必须作出其他决定:应实现哪些精度?应如何处理异常?本附录将为这些以及其他决策提供必要的背景知识。
鉴于 IEEE 浮点标准(IEEE 754)正日益得到广泛采用,本附录的浮点讨论几乎完全围绕这一标准展开。浮点运算虽然需要处理指数并移动小数部分,但大部分时间花在用整数算法处理小数部分上;这并不意味着必须与执行整数指令的硬件共用电路。因此,在讨论浮点运算之后,我们还将进一步考察整数算法。
关于计算机算术的良好参考资料,按详尽程度由浅入深排列,包括 Patterson 与 Hennessy [2009] 第 3 章,Hamacher、Vranesic 与 Zaky [1984] 第 7 章,以及 Gosling [1980] 和 Scott [1985]。