算術下溢

維基百科,自由的百科全書

算術下溢也稱為浮點數下溢,是指計算機浮點數計算的結果小於可以表示的最小數。

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

相關條目[編輯]