# J.11 谬误与陷阱
<!-- source: p1286 -->

## 谬误：实际浮点应用程序很少下溢

多数程序确实很少下溢，但有些实际程序会频繁下溢。求解一维波动方程的 SDRWAVE [Kahaner 1988] 就是例子，正常运行时也常发生下溢。某台机器的测量表明，若增加渐进下溢的硬件支持，SDRWAVE 的速度可提高约 50%。

## 谬误：整数与浮点数之间的转换很少见

在 spice 中，转换与除法一样频繁。认为转换稀少，导致 SPARC 第 8 版指令集出现了一个设计失误：没有提供从整数寄存器向浮点寄存器移动数据的指令。

## 陷阱：只提高浮点单元速度，不提高内存带宽

浮点单元的典型任务，是把两个向量相加产生第三个向量。若元素为双精度，每次浮点加法要传送三个 64 位数据，共 24 字节。若浮点单元还能并行执行乘法与加法，而多数单元都能如此，带宽需求会更大。

## 陷阱：−x 不等于 0−x

这个 IEEE 标准细节难倒过一些设计者。浮点数采用符号与数值分离表示，所以有 +0、−0 两个零。标准规定 \(0-0=+0\)，而 \(-(0)=-0\)。因此，当 x=0 时，−x 与 0−x 不同。

> 译注：原文这里按通常的舍入模式说明符号零差异；向 \(-\infty\) 舍入时，精确抵消为零的符号另有规则，不能把这一等式无条件套用于所有舍入模式。
