算术下溢

算术下溢也称为浮点数下溢,是指计算机浮点数计算的结果小于可以表示的最小数。

算术下溢出现在计算结果很接近零,使得计算结果的大小小于浮点数可以表示的最小数字。算术下溢也可以视为是浮点数指数在负值时的溢位。例如,浮点数指数范围为-128至127,一个绝对值小于2−127的浮点数就会造成下溢(假设-128的阶码用于表示负无穷)。

下溢间距

界于−fminN and fminN之间的区间称为下溢间距(underflow gap),其中fminN为一般浮点数格式所能表示的最小正数。

在早期的设计中,界于下溢间距之间的数字其值均视为零,因此若出现算术下溢,其结果会被改为零,可能是用硬件或系统软件处理,此处理方式称为“清洗为0”(flush to zero)。

1984年版的IEEE 754导入了次正规数英语subnormal numbers,次正规数和零可以填满下溢间距。假设浮点数指数范围为-128至127,最小可表示正规数为2−127,次正规数则是类似0.9 −127、0.8 −127……之类的数,计算时会将结果转换为最接近的次正规数,因此可以渐近下溢,不过最接近的次正规数中仍有可能是零。

处理算术下溢

出现算术下溢时,可能会设定一个状态位元、产生异常、产生中断或是这几项的组合。

IEEE 754中规定只有算术下溢会造成精确度下降时才回报算术下溢,一般是在最后的计算结果不对时才会出现。但若程式要捕捉算术下溢,不论是否有精确度,都会回报算术下溢。IEEE 754处理算术下溢及其他异常的方式相同,都要纪录算术下溢时的浮点运算器状态。

相关条目