--- tags: communication protocol --- # Float 16-bit IEEE 754有一個半精度的浮點數,叫Half-precision floating-point format 通訊的時候數值的部分常會用到,因為他是最小的浮點數,好用 ## Go的float16 package 我有一個專案有用到這個 https://github.com/x448/float16 不錯用,推推 ## online float16 calculator 要做確認的時候還是會需要計算一下,查到這個網站 https://oletus.github.io/float16-simulator.js/ 好用推推 其中預設的數值(1bit的sign + 5bit的exponent + 10bit的mantissa)就是IEEE 754的標準 ## 演算法 這裡有篇[paper](http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf)在講float32跟float16的雙向轉換,提供了一般的演算法跟使用查表的演算法 好文章推推 以下我把一般的演算法複製過來: ### Float16 to Float32 (half-float to float) ``` f = ((h&0x8000)<<16) | (((h&0x7c00)+0x1C000)<<13) | ((h&0x03FF)<<13) ``` ### Float32 to Float16 (float to half-float) ``` h = ((f>>16)&0x8000)|((((f&0x7f800000)-0x38000000)>>13)&0x7c00)|((f>>13)&0x03ff) ```