我有一个示例 50.33123 可以以 FP32(1.8.23) 格式存储为 0x4249532E 。如果我们将其转换为二进制
0100 0010 0100 1001 0101 0011 0010 1110
第一位是符号位,0
表示正数,
接下来的 8 位是指数 -> 1000 0100 2 -> 84 16 -> 132 10。指数 132 -127 =5
尾数1.1001 0010 1010 0110 0101 110
(23 位)
左移我的指数 => 110010.010101001100101110 2 => 50.33123 10
如果我们以 FP16(半精度格式)FP16 => 1.5.10 存储相同的内容:
不四舍五入
1.1001 0010 10 2
左移 5 => 110010.01010 2 => 50.3125 10,
误差为 50.33123 - 50.3125 => 0.01873。
四舍五入
1.1001 0010 11 2 => 左移 5 => 110010.01011 2 => 50.34375 10,
误差为 50.33123 - 50.34375 = -0.01252
我的问题是,这里的错误很重要。
有没有办法通过 FP16 实现进一步减少错误?