numpy 为什么将Float转换为Float16会创建不必要的值?

qv7cva1a  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(190)

为什么当我表演的时候

g = np.float16([4.4,4.6])

我得到了一些不同的东西

g  = [4.3984..., 4.6015...].

它会以某种方式影响矩阵的计算吗?我可以在不更改dtype的情况下更改此行为吗?谢谢!

ui7jx7zq

ui7jx7zq1#

首先,您必须将float16转换回float才能获得结果。不过,你不会得到不同的结果,这就是实际的价值。
无论精度如何,都不能用浮点数表示4.40.3和许多其他有理数。Python本身不存储4.4

>>> f"{4.4}" 
'4.4'
>>> f"{4.4:.15f}" 
'4.400000000000000'
>>> f"{4.4:.20f}" 
'4.40000000000000035527'

4.4打印为4.4的原因是,根据IEEE 754浮点数标准,15是默认的打印精度。
使用较小的类型会增加误差:

>>> f"{np.float64(4.4):.20f}" 
'4.40000000000000035527'
>>> f"{np.float32(4.4):.20f}" 
'4.40000009536743164062'
>>> f"{np.float16(4.4):.20f}" 
'4.39843750000000000000'

数字支付

相关问题