当将数字从一半转换为单浮式表示时,我看到数值发生了变化
这里我将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:
错误是而不是“许多浮点增量远离”[更正以匹配OP改进的措辞]。阅读标准IEEE 754-2008。它为尾数指定10位,或1024个不同的值。您的值为2^16,因此增量为2^6或64
该格式还为符号提供1位,为特征(指数)提供5位
65500存储为与
+ 2^6 * 1023.5
等价的内容。当您转换为float32时,这将直接转换为65504
。当您将较大的数字转换为10位精度时,您失去了精度。在任一方向上进行转换时,结果总是受到精度较低的类型的约束相关问题 更多 >
编程相关推荐