基本介紹
- 中文名:半精度浮點數
- 外文名:Half-precision floating-point format
簡介,定義,參閱,
簡介
半精度浮點數是一種計算機使用的二進制浮點數數據類型。半精度浮點數使用2位元組(16位)存儲。在IEEE 754-2008中,它被稱作binary16。這種類型只適合用來存儲那些對精度要求不高的數字,而不適合用來計算。
半精度浮點數是一種相對較新的浮點類型。 英偉達在2002年初發布的Cg語言中將它定義為 half 數據類型,並且首次在2002年末發布的GeForce FX中實現。ILM當時正在尋找一種能夠有高動態範圍,並且不需要過多消耗硬碟以及記憶體,而且能像單精度浮點數和雙精度浮點數那樣被用來進行浮點計算的圖像格式。由SGI的John Airey領導的硬體加速可程式著色小組在1997年發明了作為'bali'設計工作的一部分的s10e5數據類型。這曾在SIGGRAPH2000年的論文中介紹過。(見章節 4.3)並且在美國專利7518615中被進一步記錄。
半精度浮點數可以在包括OpenEXR,JPEG XR,OpenGL,Cg語言和D3DX等數種計算機圖形環境中使用。與8位或16位整數的相比,它的優點是可以提升動態範圍,從而使高對比度圖片中更多細節得以保留。與單精度浮點數相比,它的優點是只需要一半的存儲空間和頻寬(但是會以精度和數值範圍為代價)。
定義
IEEE 754 標準指定了一個binary16要有如下的格式:
- Sign bit(符號位): 1 bit
- Exponent width(指數位寬): 5 bits
- Significand precision(尾數精度): 11 bits (有10位被顯式存儲)
例子
0 01111 0000000000 = 1
0 01111 0000000001 = 1 + 2^−10 = 1.0009765625 (1之後的最接近的數)
1 10000 0000000000 = −2
0 11110 1111111111 = 65504 (max half precision)
0 00001 0000000000 = 2^−14 ≈ 6.10352 × 10^−5 (最小正指數)
0 00000 1111111111 = 2^−14 - 2−24 ≈ 6.09756 × 10^−5 (最大尾數)
0 00000 0000000001 = 2^−24 ≈ 5.96046 × 10^−8 (最小正尾數)
0 00000 0000000000 = 0
1 00000 0000000000 = −0
0 11111 0000000000 = infinity
1 11111 0000000000 = −infinity
0 01101 0101010101 = 0.333251953125 ≈ 1/3
參閱
- IEEE 754: IEEE二進制浮點數算數標準 (IEEE 754)
- ISO/IEC 10967, Language Independent Arithmetic
- Primitive data type
- RGBE image format