---
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)
```