gpt4 book ai didi

c - 如何最小化 FP16 半精度 float 的精度误差

转载 作者:行者123 更新时间:2023-11-30 16:44:31 25 4
gpt4 key购买 nike

我有一个示例 50.33123 可以以 FP32(1.8.23) 格式存储为 0x4249532E 。如果我们将其转换为二进制

0100 0010 0100 1001 0101 0011 0010 1110

第一位是符号位,即0表示正数,

接下来的 8 位是指数 -> 1000 01002 -> 8416 -> 13210。指数 132 -127 = 5

尾数1.1001 0010 1010 0110 0101 110 (23 位)

左移我的指数 => 110010.0101010011001011102 => 50.3312310

如果我们以 FP16(半精度格式)存储相同的内容,FP16 => 1.5.10:

不进行四舍五入
1.1001 0010 10<子>2 左移 5 => 110010.010102 => 50.312510,
错误为 50.33123 - 50.3125 => 0.01873。

四舍五入
1.1001 0010 112 => 左移 5 => 110010.010112 => 50.3437510,
错误为 50.33123 - 50.34375 = -0.01252

我的问题是,这里的错误很严重。
有什么方法可以进一步减少 FP16 实现的错误吗?

最佳答案

how do we minimize precision error with FP16 half precision floating point numbers

Fp16 => 1.5.10 以二进制浮点格式 fp_16 显式存储 10 位精度。通过隐含位,它提供的值 Unit in the Last Place是最高有效位的 2-10。 50.33123 作为浮点型,其精确值为 50.331230163574218750x1.92A65Cp+5。通过舍入来最小化精度误差,fp_16 最接近的值为 50.343750x1.92Cp+5

OP 已完成此舍入以最小化误差。

<小时/>

... the error in this case is, 50.33123 - 50.34375 = -0.01252
My question is, here the error is significant. is there any way to reduce the error further with FP16 implementations?

0.02% 的差异并不意外。如果不更改 1.5.10 格式,或保存如下所示的附加值,这种精度损失是不可避免的。

float a = 50.33123f;
a_fp16_upper = (fp_16) a;
a_fp16_lower = (fp_16) (a - a_fp16_upper);

关于c - 如何最小化 FP16 半精度 float 的精度误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com