为什么从np.float16转换为np.float32会修改该值?

2024-09-29 21:53:35 发布

您现在位置:Python中文网/ 问答频道 /正文

当将数字从一半转换为单浮式表示时,我看到数值发生了变化

这里我将65500存储为半精度浮点,但是升级到单精度会将基础值更改为65504,这是远离目标的许多浮点增量

在这种特殊情况下,为什么会发生这种情况

(Pdb) np.asarray(65500,dtype=np.float16).astype(np.float32)
array(65504., dtype=float32)

作为旁注,我还观察到

(Pdb) int(np.finfo(np.float16).max)
65504

Tags: 目标np情况精度数字基础增量pdb
1条回答
网友
1楼 · 发布于 2024-09-29 21:53:35

错误是而不是“许多浮点增量远离”[更正以匹配OP改进的措辞]。阅读标准IEEE 754-2008。它为尾数指定10位,或1024个不同的值。您的值为2^16,因此增量为2^6或64

该格式还为符号提供1位,为特征(指数)提供5位

65500存储为与+ 2^6 * 1023.5等价的内容。当您转换为float32时,这将直接转换为65504。当您将较大的数字转换为10位精度时,您失去了精度。在任一方向上进行转换时,结果总是受到精度较低的类型的约束

相关问题 更多 >

    热门问题