float32 representation to float64 NumPy Python
情况
-
我需要使用
astropy.io 中的fits 从文件中读取数据,该文件在numpy 中使用。 -
我在读取时得到的一些值是非常小的负
float32 数字,而实际上数据上不应该存在负值(由于数据特征)。
问题
-
难道这些数字非常小
float64 ,当读取并转换为float32 时变为负数?如果是,它们必须有多小? -
有没有办法倒回这个过程,即获得原始的非常小的
float64 值?
- Can it be that those numbers were very small float64, that when read and casted to float32 became negative? If yes, how small do they have to be?
否 - 如果原始 float64 值小于可表示的最小 float32 数,则在转换后它将简单地等于零:
1 2 3 4 5 6 7 8 9 | 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 |
从一种有符号表示转换为另一种表示始终保留符号位。
- Is there a way to rewind the process, i.e., to get the original positive very small float64 value?
否 - 从 64 位转换为 32 位意味着您实际上丢弃了原始表示中的一半信息,一旦它消失了,就没有神奇的方法可以恢复它。
对负值的一个更合理的解释是,它们是由于在数据存储之前对数据执行的计算的舍入误差造成的。