迷你浮點數

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

迷你浮點minifloats)是用少位元浮點數值。不太適合通用數值計算。通常用於特殊目的,像電腦圖形學,迭代很小並且精度具有美學效果。[1]機器學習也使用類似格式,如bfloat16

Minifloats按照IEEE 754標準設計。必須遵守次正規數和正規數之間邊界規則(未明確寫入的),且具無限大和 NaN 特殊模式。標準化數字以有偏差的指數儲存。該標準的新修訂版 IEEE 754-2008 具有 16 位元二進位小型浮點數。

符號[编辑]

迷你浮點通常使用四個數字的元組(S、E、M、B)來描述:

  • S是符號欄位的長度。通常為 0 或 1。
  • E是指數欄位的長度。
  • M是尾數(有效數字)欄位的長度。
  • B是指數偏差。

因此,以 (S, E, M, B) 表示的小型浮點格式為 S + E + M 位元。 (S, E, M, B) 表示法可以轉換為 (B, P, L, U) 格式,如 (2, M + 1, B + 1, 2 S − B) (IEEE指數)。

例子[编辑]

8位元 minifloat 範例(1.4.3)
符號 指數 有效數
0 0 0 0 0 0 0 0

具有1個符號位元、4個指數位元和3個有效位元[2][3]對於大多數值指數x是2x−7。所有IEEE 754原則都應該有效。 [4]


零的表示[编辑]

0 0000 000 = 0
1 0000 000 = −0

次正規數[编辑]

有效數用0.擴展:

0 0000 001 = 0.0012 × 21 - 7 = 0.125 × 2-6 = 0.001953125 (最小次正規數)
...
0 0000 111 = 0.1112 × 21 - 7 = 0.875 × 2-6 = 0.013671875 (最大次正規數)

標準化數字[编辑]

有效數用1.擴展:

0 0001 000 = 1.0002 × 21 - 7 = 1 × 2-6 = 0.015625 (least normalized number)
0 0001 001 = 1.0012 × 21 - 7 = 1.125 × 2-6 = 0.017578125
...
0 0111 000 = 1.0002 × 27 - 7 = 1 × 20 = 1
0 0111 001 = 1.0012 × 27 - 7 = 1.125 × 20 = 1.125 (最小值大於 1)
...
0 1110 000 = 1.0002 × 214 - 7 =  1.000 × 27 =  128
0 1110 001 = 1.0012 × 214 - 7 =  1.125 × 27 =  144
...
0 1110 110 = 1.1102 × 214 - 7 =  1.750 × 27 = 224
0 1110 111 = 1.1112 × 214 - 7 =  1.875 × 27 = 240 (最大標準數)

無窮[编辑]

0 1111 000 = +∞
1 1111 000 = −∞

非數[编辑]

s 1111 mmm = NaN (if mmm ≠ 000)

數值表[编辑]

這是此範例 8 位元浮點的所有可能值的圖表。

… 000 … 001 … 010 … 011 … 100 … 101 … 110 … 111
0 0000 … 0 0.001953125 0.00390625 0.005859375 0.0078125 0.009765625 0.01171875 0.013671875
0 0001 … 0.015625 0.017578125 0.01953125 0.021484375 0.0234375 0.025390625 0.02734375 0.029296875
0 0010 … 0.03125 0.03515625 0.0390625 0.04296875 0.046875 0.05078125 0.0546875 0.05859375
0 0011 … 0.0625 0.0703125 0.078125 0.0859375 0.09375 0.1015625 0.109375 0.1171875
0 0100 … 0.125 0.140625 0.15625 0.171875 0.1875 0.203125 0.21875 0.234375
0 0101 … 0.25 0.28125 0.3125 0.34375 0.375 0.40625 0.4375 0.46875
0 0110 … 0.5 0.5625 0.625 0.6875 0.75 0.8125 0.875 0.9375
0 0111 … 1 1.125 1.25 1.375 1.5 1.625 1.75 1.875
0 1000 … 2 2.25 2.5 2.75 3 3.25 3.5 3.75
0 1001 … 4 4.5 5 5.5 6 6.5 7 7.5
0 1010 … 8 9 10 11 12 13 14 15
0 1011 … 16 18 20 22 24 26 28 30
0 1100 … 32 36 40 44 48 52 56 60
0 1101 … 64 72 80 88 96 104 112 120
0 1110 … 128 144 160 176 192 208 224 240
0 1111 … NaN NaN NaN NaN NaN NaN NaN
1 0000 … −0 −0.001953125 −0.00390625 −0.005859375 −0.0078125 −0.009765625 −0.01171875 −0.013671875
1 0001 … −0.015625 −0.017578125 −0.01953125 −0.021484375 −0.0234375 −0.025390625 −0.02734375 −0.029296875
1 0010 … −0.03125 −0.03515625 −0.0390625 −0.04296875 −0.046875 −0.05078125 −0.0546875 −0.05859375
1 0011 … −0.0625 −0.0703125 −0.078125 −0.0859375 −0.09375 −0.1015625 −0.109375 −0.1171875
1 0100 … −0.125 −0.140625 −0.15625 −0.171875 −0.1875 −0.203125 −0.21875 −0.234375
1 0101 … −0.25 −0.28125 −0.3125 −0.34375 −0.375 −0.40625 −0.4375 −0.46875
1 0110 … −0.5 −0.5625 −0.625 −0.6875 −0.75 −0.8125 −0.875 −0.9375
1 0111 … −1 −1.125 −1.25 −1.375 −1.5 −1.625 −1.75 −1.875
1 1000 … −2 −2.25 −2.5 −2.75 −3 −3.25 −3.5 −3.75
1 1001 … −4 −4.5 −5 −5.5 −6 −6.5 −7 −7.5
1 1010 … −8 −9 −10 −11 −12 −13 −14 −15
1 1011 … −16 −18 −20 −22 −24 −26 −28 −30
1 1100 … −32 −36 −40 −44 −48 −52 −56 −60
1 1101 … −64 −72 −80 −88 −96 −104 −112 −120
1 1110 … −128 −144 −160 −176 −192 −208 −224 −240
1 1111 … −∞ NaN NaN NaN NaN NaN NaN NaN

只有 242 個不同的非 NaN 值(如果 +0 和 -0 視為不同),因為 14 個位元模式代表 NaN。

可以使用腳本為 SEMB 值的任意組合產生如上所述的表格PythonGDScript.

其它偏差值[编辑]

在這些小尺寸下,其它偏差值可能會很有趣,例如 -2 的偏差將使數字 0-16 具有與整數 0-16 相同的位表示形式,但會導致無法表示非整數值。

0 0000 000 = 0.0002 × 21 - (-2) = 0.0 × 23 = 0 (subnormal number)
0 0000 001 = 0.0012 × 21 - (-2) = 0.125 × 23 = 1 (subnormal number)
0 0000 111 = 0.1112 × 21 - (-2) = 0.875 × 23 = 7 (subnormal number)
0 0001 000 = 1.0002 × 21 - (-2) = 1.000 × 23 = 8 (normalized number)
0 0001 111 = 1.1112 × 21 - (-2) = 1.875 × 23 = 15 (normalized number)
0 0010 000 = 1.0002 × 22 - (-2) = 1.000 × 24 = 16 (normalized number)

Arithmetic[编辑]

Addition[编辑]

Addition of (1.3.2.3)-minifloats

此圖示範了增加較小的 (1.3.2.3)-6 位元迷你浮點。

此浮點系統完全遵循IEEE 754規則。

NaN作為運算元始終產生NaN結果。

∞−∞和 (−∞) +∞會產生 NaN(綠)。∞可以按有限值增減而不會發生變化。

有限操作數的和可以給出無限結果(即 14.0 + 3.0 = +∞,因為結果是青,-∞紅)。


算術運算可以類似地說明:

參見[编辑]

參考[编辑]

  1. ^ Mocerino, Luca; Calimera, Andrea. AxP: A HW-SW Co-Design Pipeline for Energy-Efficient Approximated ConvNets via Associative Matching. Applied Sciences. 24 November 2021, 11 (23): 11164. doi:10.3390/app112311164可免费查阅. 
  2. ^ IEEE half-precision has 5 exponent bits with bias 15 (), IEEE single-precision has 8 exponent bits with bias 127 (), IEEE double-precision has 11 exponent bits with bias 1023 (), and IEEE quadruple-precision has 15 exponent bits with bias 16383 (). See the Exponent bias article for more detail.
  3. ^ O'Hallaron, David R.; Bryant, Randal E. Computer systems: a programmer's perspective 2. Boston, Massachusetts, USA: Prentice Hall. 2010. ISBN 978-0-13-610804-7. 
  4. ^ Burch, Carl. Floating-point representation. Hendrix College. [2023-08-29]. 
  5. ^ Buck, Ian, Chapter 32. Taking the Plunge into GPU Computing, Pharr, Matt (编), GPU Gems, 2005-03-13 [2018-04-05], ISBN 0-321-33559-7 .
  6. ^ Garrard, Andrew. 10.3. Unsigned 10-bit floating-point numbers. Khronos Data Format Specification v1.2 rev 1. Khronos Group. [2023-08-10]. 
  7. ^ Garrard, Andrew. 10.2. Unsigned 11-bit floating-point numbers. Khronos Data Format Specification v1.2 rev 1. Khronos Group. [2023-08-10]. 
  8. ^ Shaneyfelt, Dr. Ted. Dr. Shaneyfelt's Floating Point Consruction Gizmo. Dr. Ted Shaneyfelt. [2023-08-29]. 

外部連結[编辑]