常见浮点数格式梳理
常見浮點數(shù)格式梳理
IEEE 754 標(biāo)準(zhǔn)
浮點數(shù)轉(zhuǎn)換網(wǎng)站:https://www.h-schmidt.net/FloatConverter/IEEE754.html
IEEE二進(jìn)制浮點數(shù)算術(shù)標(biāo)準(zhǔn),為許多CPU與浮點運算器所采用。這個標(biāo)準(zhǔn)定義了表示浮點數(shù)的格式(包括負(fù)零-0)與反常值(denormal number),一些特殊數(shù)值(無窮(Inf)與非數(shù)值(NaN)),以及這些數(shù)值的“浮點數(shù)運算符”;它也指明了四種數(shù)值舍入規(guī)則和五種例外狀況(包括例外發(fā)生的時機與處理方式)。
IEEE 754規(guī)定了四種表示浮點數(shù)值的方式:單精確度(32位)、雙精確度(64位)、延伸單精確度(43比特以上,很少使用)與延伸雙精確度(79比特以上,通常以80位實現(xiàn))。只有32位模式有強制要求,其他都是選擇性的。大部分編程語言都提供了IEEE浮點數(shù)格式與算術(shù),但有些將其列為非必需的。例如,IEEE 754問世之前就有的C語言,現(xiàn)在包括了IEEE算術(shù),但不算作強制要求(C語言的float通常是指IEEE單精確度,而double是指雙精確度)。
(摘自維基百科)
四種精度的浮點數(shù)的各位數(shù)含義如下:
| 單精度 | 1 | 5 | 10 | 16 |
| 單精度 | 1 | 8 | 23 | 32 |
| 雙精度 | 1 | 11 | 52 | 64 |
| 長雙精度 | 1 | 15 | 64 | 80 |
各類型浮點數(shù)的精度和動態(tài)范圍:
| fp16 (半精度) | 5.96×10?85.96\times 10^{-8}5.96×10?8 | 655046550465504 |
| fp32 (單精度) | 1.4×10?451.4\times 10^{-45}1.4×10?45 | 3.4×10483.4\times 10^{48}3.4×1048 |
這里僅介紹最基本的各位的含義,詳細(xì)的規(guī)約形式、移碼、舍入等請參考具體標(biāo)準(zhǔn)、相關(guān)課程或博客1、博客2。
fp16、fp32與bf16
相信在機器學(xué)習(xí)領(lǐng)域,除了上面提到的標(biāo)準(zhǔn)的浮點數(shù)之外,大家還經(jīng)常見到的一種浮點數(shù)格式就是所謂的 bf16。
-
BF16 是對FP32單精度浮點數(shù)截斷數(shù)據(jù),即用8bit 表示指數(shù),7bit 表示小數(shù)。
-
FP16半精度浮點數(shù),用5bit 表示指數(shù),10bit 表示小數(shù);
與32位相比,采用BF16/FP16吞吐量可以翻倍,內(nèi)存需求可以減半。但是這兩者精度上差異不一樣,BF16 可表示的整數(shù)范圍更廣泛,但是尾數(shù)精度較小;FP16 表示整數(shù)范圍較小,但是尾數(shù)精度較高。計算時可避免計算溢出,出現(xiàn)Inf case;FP16 在輸入數(shù)據(jù)超過65506 時,計算結(jié)果溢出,出現(xiàn)Inf case。
Ref:
https://zh.wikipedia.org/wiki/IEEE_754
https://www.zhihu.com/search?type=content&q=bf16
https://www.h-schmidt.net/FloatConverter/IEEE754.html
https://blog.csdn.net/a3192048/article/details/106662693
http://c.biancheng.net/view/314.html
總結(jié)
- 上一篇: 汪姓氏四字祝福语新婚?
- 下一篇: 有点好奇益禾堂总部在哪,有人知道不?