为什么将float转换为float16会产生不必要的值



为什么执行

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

我得到了一些不同的

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

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

首先,必须将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的原因是15是根据IEEE 754浮点数标准的默认打印精度。

使用较小的类型会增加错误:

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

NumPy

最新更新