算术下溢

维基百科,自由的百科全书

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

算术下溢出現在計算結果很接近零,使得計算結果的大小小於浮点数可以表示的最小數字。算术下溢也可以視為是浮点数指數在負值時的溢位。例如,浮点数指數范围为-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處理算术下溢及其他異常的方式相同,都要紀錄算术下溢時的浮點運算器狀態。

相關條目