簡介

瞭解計算該使用哪種精確度格式至關重要,但這有時可能會感覺像是一種取捨:雙精確度運算的準確度似乎與單精確度的效能價值旗鼓相當。兩邊都可確保準確性並挑戰數值的限制,但兩種技術都各有其獨特的用途和營運成本。

本文我們將深入探討每種格式、它們之間的差異,以及混合不同精確度如何有助於在不喪失準確度的前提下維持效率。

精確度在電腦科學中的角色

為了瞭解單精確度和雙精確度運算之間的差異,瞭解精確度在電腦科學中的角色是很重要的。請想像一下,使用無理數(例如圓周率)進行計算,且僅使用小數點後兩位 (3.14),會是怎樣的情況。如果您進行計算時使用小數點後十位 (3.1415926535),想必會得到更準確的結果。

對於電腦而言,這種準確度稱為精確度,它採用的是二進制(位元),而非十進制。使用的位元越多,精確度越高。

Man on computer in a dim room with a city view.

IEEE 標準浮點數表示法

用電腦二進位表示大數需要標準,以確保計算間不會有巨大差異。因此,電機電子工程師學會 (Institute of Electrical and Electronics Engineers, IEEE) 制定了 IEEE 二進位浮點數算術標準 (IEEE 754)。 

IEEE 754 有三個部分:

  1. 基數 - 0 代表正數;1 代表負數。 
  2. 偏移指數 - 指數所代表的有可能是正指數,也可能是負指數。因此,必須給實際指數加上一個偏移值才會獲得應儲存的指數。 
  3. 尾數 - 又稱為有效數,尾數代表了數字的精確度位元。

以這些部分為基礎,IEEE 754 將浮點數以兩種方式呈現:單精確度格式與雙精確度格式。雖然還有許多表示浮點數的方式,IEEE 754 是最常見的,因為它通常是最有效的數值表示方法。 

Blue abstract data dots

IEEE 標準浮點數表示法

用電腦二進位表示大數需要標準,以確保計算間不會有巨大差異。因此,電機電子工程師學會 (Institute of Electrical and Electronics Engineers, IEEE) 制定了 IEEE 二進位浮點數算術標準 (IEEE 754)。 

IEEE 754 有三個部分:

  1. 基數 - 0 代表正數;1 代表負數。 
  2. 偏移指數 - 指數所代表的有可能是正指數,也可能是負指數。因此,必須給實際指數加上一個偏移值才會獲得應儲存的指數。 
  3. 尾數 - 又稱為有效數,尾數代表了數字的精確度位元。

以這些部分為基礎,IEEE 754 將浮點數以兩種方式呈現:單精確度格式與雙精確度格式。雖然還有許多表示浮點數的方式,IEEE 754 是最常見的,因為它通常是最有效的數值表示方法。 

什麼是單精確度浮點數格式?

單精確度浮點數格式使用 32 位元的電腦記憶體,可以表示各種數值。這種格式通常稱為 FP32,最適合用於不會因為一點小誤差受到影響的計算。

什麼是雙精確度浮點數格式?

另一方面,雙精確度浮點數格式則佔用 64 位元的電腦記憶體,而且比單精確度格式準確許多。這種格式通常稱為 FP64,用於表示需要較多位數或更精確計算的數值。

雖然雙精確度可提高準確度,它也需要更多運算資源、記憶體儲存以及資料傳輸。每次計算都使用此格式的成本不一定是合理的。

單精確度與雙精確度之間的差異

要分辨單精確度和雙精確度運算,最簡單的方法就是查看浮點數用了多少位元來表示。單精確度使用 32 位元表示浮點數。雙精確度使用 64 位元表示浮點數。 

以歐拉數 (e) 為例。e 的小數點後 50 位為:2.7182818284590452353602874713526624977572470936999.

轉換為單精確度的二進位歐拉數為:  
01000000001011011111100001010100

轉換為雙精確度的二進位歐拉數為: 
010000000000010110111111 0000101010001011000101000101011101101001

第一個數字代表基數。下一組數字(單精確度為八個,雙精確度為十一個)代表偏移指數。最後一組數字(單精確度為 23 個,雙精確度為 52 個)代表尾數。

比較表:單精確度與雙精確度的比較

 

單精確度

雙精確度

概述

使用 32 位元記憶體來表示數值,其中一個位元代表尾數的符號

使用 64 位元記憶體來表示數值,其中一個位元代表尾數的符號

 

偏移指數

 

指數使用 8 個位元

 

指數使用 11 個位元

 

尾數

 

尾數使用 23 個位元(代表小數部分)

 

尾數使用 52 個位元(代表小數部分)

 

實際應用

常用於遊戲或任何需要更廣泛表示但不用高準確度的程式

常用於科學計算以及需要高準確度的複雜程式

多精確度對比混合精確度運算

除了視為多精確度的單精確度和雙精確度運算之外,也有混合精確度的運算。

混合精確度運算有時稱為跨精確度,常用於機器學習領域。它執行計算會從半精確度(16 位元)值進行快速矩陣數學運算開始。接著,在算出數值後,機器會以較高的精確度儲存數值。 

混合精確度運算的優點在於,它所提供的累積答案與雙精確度運算中執行的計算準確度類似,卻不需要相同級別的功耗、執行時間和記憶體。

Blue abstract computer chip layout

混合不同精確度的優點

執行計算並沒有一體適用的解方,不同的工作負載就需要不同的精確度。電腦科學家需要基於現有資源、預算、儲存空間和其他變數,來兼採各種不同的運算格式。 

舉例來說,雙精確度因為極為精確,可能最適合大數據研究或氣候模型製作。但是這些計算所需的儲存空間和資源未必總能合理化其使用。開發人員可視需求混用不同的精確度級別,以最佳化效率和運算花費。 

最佳化您的運算效率

雖然電腦運算的準確性固然重要,但瞭解如何從使用不同精確度中受益也是非常重要的。為了一方面不放棄計算準確性,一方面確保營運效率,您需要支援不同浮點數格式的彈性功能。

AMD Vivado™ Design Suite

AMD 的 AMD Vivado™ ML 和 System Generator for DSP 皆提供健全的工具,支援各種浮點數精確度,無論是多精確度或混合精確度。這套領先業界的工具套件也提供客製精確度的彈性,可加速設計、提高生產力並有效應用資源。進一步瞭解 AMD Vivado 如何提升您的運算效率。

保持連線

註冊時事通訊以接收最新資料中心消息,或是聯絡 AMD 銷售代表。