主題
Search

浮點運算


簡單來說,浮點運算是指透過任何數量的自動化裝置對浮點表示執行的算術運算。

傳統上,這個定義的措辭僅適用於對實數的浮點表示(即,浮點數集合的有限元素)執行的算術運算,儘管幾種額外的浮點資料型別,包括有符號無窮大和 NaN,也通常被允許作為此類函式的輸入。

儘管定義簡潔,但值得注意的是,最廣泛採用的計算標準將幾乎整個浮點理論都歸為“浮點運算”之下。這種廣度的原因之一源於這樣一個事實:任何浮點表示都只能表示實數連續統 R 的有限子集;這種有限性帶來了一系列意想不到的障礙,其中最主要的是實數算術的某些性質(例如,加法的結合律)有時對浮點數不成立(IEEE 計算機協會 2008)。因此,任何對浮點運算和/或代數的全面處理都必須在討論實際操作本身之前,解決包括浮點數表示、舍入等在內的眾多注意事項。

截至 2014 年,最常用的浮點運算標準是 IEEE 754-2008 浮點算術標準(簡寫為 IEEE 754-2008,此後簡稱為 IEEE 754)。該框架是對其前身 IEEE 754-1985 的大規模修訂,包含一套內建的指南,幾乎詳細說明了浮點理論的方方面面。特別是,IEEE 754 詳細討論了浮點理論的以下方面:

1. 浮點表示和格式。

2. 浮點表示的屬性,包括浮點數的舍入。

3. 浮點表示的算術和代數運算。

4. 無窮大、非數字 (NaNs)、符號和異常。

上述許多主題在標準文件的多個章節中進行了討論(IEEE 計算機協會 2008)。

IEEE 754 對浮點表示定義的“必需”算術運算是加法、減法、乘法、除法、平方根和融合乘加(由 (x,y,z)|->(x×y)+z 定義的三元運算);這些是必需的,因為遵守該框架要求這些運算在整個過程中都支援正確的舍入。該框架內還提供了許多其他“推薦”運算,其中一些本質上是算術運算;這些是推薦的,因為框架並未嚴格要求支援它們。最後,請注意,該框架既包含一組實用函式(也可以被認為是算術函式),即 copynegateabs,也包含許多為向量值輸入定義的密切相關函式(IEEE 計算機協會 2008,第 46-47 頁)

運算函式可能的異常
expe^x[-infty,+infty]溢位;下溢
expm1e^x-1[-infty,+infty]溢位;下溢
exp22^x[-infty,+infty]溢位;下溢
exp2m12^x-1[-infty,+infty]溢位;下溢
exp1010^x[-infty,+infty]溢位;下溢
exp10m110^x-1[-infty,+infty]溢位;下溢
loglog_e(x)=ln(x)[0,+infty]除以零(如果 x=0);無效操作(如果 x<0
log2log_2(x)[0,+infty]除以零(如果 x=0);無效操作(如果 x<0
log10log_10(x)=log(x)[0,+infty]除以零(如果 x=0);無效操作(如果 x<0
logp1log_e(x+1)[-1,+infty]除以零(如果 x=-1);無效操作(如果 x<-1);下溢
log2p1log_2(x+1)[-1,+infty]除以零(如果 x=-1);無效操作(如果 x<-1);下溢
log10p1log_10(x+1)[-1,+infty]除以零(如果 x=-1);無效操作(如果 x<-1);下溢
hypot(x,y)sqrt(x^2+y^2)[-infty,+infty]^2溢位;下溢
rSqrt1/sqrt(x)[0,+infty]無效操作(如果 x<0);除以零(如果 x=+/-0
compound(x,n)(1+x)^n[-1,+infty]×Z無效操作(如果 x<-1
rootn(x,n)x^(1/n)[-infty,+infty]×Z無效操作(如果 n=0x<0n 為偶數);溢位/下溢(如果 n=-1
pown(x,n)x^n[-infty,+infty]×Z多種情況
pow(x,y)x^y[-infty,+infty]^2多種情況
powr(x,y)x^y[0,+infty]×[-infty,+infty]多種情況

上表總結了 IEEE 754 中推薦的算術運算。請注意,標記為“多種情況”的異常的具體細節在 IEEE 754 文件中詳細說明(IEEE 計算機協會 2008,第 43-45 頁)。

如上所述,即使是一些基本的要求的算術運算子,在浮點表示和舍入的情況下,其行為也是不可預測的。這源於這樣一個事實:IEEE 754 中假定“正常”算術運算具有無限精度,而浮點加法、減法、乘法和除法的值(分別符號地寫為  direct sum ,  circleminus ,  tensor , 和 ⌀)是透過對以公共指數表示的浮點數執行“正常”運算 +, -, ×, 和 /,然後將結果舍入到固定位數的有效數字(透過所謂的首選指數)。因此,在計算的算術和/或舍入步驟中都可能發生精度損失、溢位和下溢。例如,x=1.234567×10^5y=9.876543×10^(-3) 相加的結果正好是

 x+y=(1.234567+0.0000009876543)×10^5=1.23456709876543×10^5.
(1)

另一方面,在基數b=10 且精度為 7 位的框架中,浮點加法返回的值將是

 x direct sum y=1.234567×10^5=x.
(2)

類似地,給定 x=1.234571467×10^5y=1.23457129×10^5,可以得到

 x-y=(1.234571467-1.234571419)×10^5=0.000000048×10^5=0.0048
(3)

使用上面假設的 7 位精度。但是,可以得到

 x circleminus y=0.0,
(4)

因此導致完全沒有精度。請注意,在像這樣的極端情況下,實現 IEEE 754 的系統不會實際產生 +/-0 作為結果:特別是,這種情況會觸發下溢警告。關於上述其他算術函式的詳細資訊和注意事項可以在文件中找到(IEEE 計算機協會 2008,第 5 節和第 9 節)。

浮點運算在本質上是算術運算和代數/三角運算之間存在一些區別:後一種運算通常歸為浮點代數的範疇。


另請參閱

算術, 偏移指數, 浮點代數, 浮點指數, 浮點規格化數, 浮點數, 浮點首選指數, 浮點量子, 浮點表示, IEEE 754-2008, 區間算術, NaN, 安靜 NaN, 信令 NaN, 有效數, 次正規數

此條目由 Christopher Stover 貢獻

使用 探索

參考文獻

Goldberg, D. "What Every Computer Scientist Should Know About Floating-Point Arithmetic." ACM Comput. Surv. 23, 5-48, March 1991. http://docs.sun.com/source/806-3568/ncg_goldberg.html.Hauser, J. R. "Handling Floating-Point Exceptions in Numeric Programs." ACM Trans. Program. Lang. Sys. 18, 139-174, 1996. http://www.jhauser.us/publications/HandlingFloatingPointExceptions.html.IEEE Computer Society. "IEEE Standard for Floating-Point Arithmetic: IEEE Std 754-2008 (Revision of IEEE Std 754-1985)." 2008. http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=4610935.Severance, C. (Ed.). "IEEE 754: An Interview with William Kahan." Computer, 114-115, Mar. 1998.Stevenson, D. "A Proposed Standard for Binary Floating-Point Arithmetic: Draft 8.0 of IEEE Task P754." IEEE Comput. 14, 51-62, 1981.

在 上引用

浮點運算

請引用本文為

Stover, Christopher. "浮點運算。" 來自 Web 資源,由 Eric W. Weisstein 建立。 https://mathworld.tw/Floating-PointArithmetic.html

主題分類