情况
- 我需要使用
fits
从文件中读取数据astropy.io
,它在numpy
中使用。 - 我在读取时得到的一些值是非常小的负
float32
数字,而数据上实际上不应该存在负值(由于数据特征(。
问题
- 难道这些数字是非常小的
float64
,当读取并投射到float32
时变成负数吗?如果是,它们必须有多小? - 有没有办法倒带过程,即获得原始的正极小
float64
值?
- 难道这些数字是非常小的浮点数64,当读取并投射到浮点数32时变成负数吗?如果是,它们必须有多小?
否 - 如果原始 float64 值小于最小的可表示 float32 数字,则在转换后它将等于零:
tiny = np.finfo(np.float64).tiny # smallest representable float64 value
print(tiny)
# 2.22507385851e-308
print(tiny == 0)
# False
print(np.float32(tiny))
# 0.0
print(np.float32(tiny) == 0)
# True
从一个有符号表示转换为另一个符号表示始终保留符号位。
- 有没有办法倒带该过程,即获得原始的正非常小的 float64 值?
否 - 从 64 位转换为 32 位意味着您实际上丢弃了原始表示中的一半信息,一旦它消失,就没有神奇的方法可以恢复它。
对负值的一个更合理的解释是,它们是由存储数据之前对数据执行的计算的舍入误差引起的。