J.11 谬误与陷阱
谬误:实际浮点应用程序很少下溢
多数程序确实很少下溢,但有些实际程序会频繁下溢。求解一维波动方程的 SDRWAVE [Kahaner 1988] 就是例子,正常运行时也常发生下溢。某台机器的测量表明,若增加渐进下溢的硬件支持,SDRWAVE 的速度可提高约 50%。
谬误:整数与浮点数之间的转换很少见
在 spice 中,转换与除法一样频繁。认为转换稀少,导致 SPARC 第 8 版指令集出现了一个设计失误:没有提供从整数寄存器向浮点寄存器移动数据的指令。
陷阱:只提高浮点单元速度,不提高内存带宽
浮点单元的典型任务,是把两个向量相加产生第三个向量。若元素为双精度,每次浮点加法要传送三个 64 位数据,共 24 字节。若浮点单元还能并行执行乘法与加法,而多数单元都能如此,带宽需求会更大。
陷阱:−x 不等于 0−x
这个 IEEE 标准细节难倒过一些设计者。浮点数采用符号与数值分离表示,所以有 +0、−0 两个零。标准规定 ,而 。因此,当 x=0 时,−x 与 0−x 不同。
译注:原文这里按通常的舍入模式说明符号零差异;向 舍入时,精确抵消为零的符号另有规则,不能把这一等式无条件套用于所有舍入模式。