早上好,
我正在从 FITS 文件中读取两个数字(表示单个数字的整数和浮点部分),将它们转换为长双精度数(在我的机器中为 128 位),然后将它们相加。
结果并不像使用 128 位浮点数所期望的那样精确。这是代码:
a_int = np.longdouble(read_header_key(fits_file, 'I'))
print "I %.25f" % a_int, type(a_int)
a_float = np.longdouble(read_header_key(fits_file, 'F'))
print "F %.25f" % a_float, a_float.dtype
a = a_int + a_float
print "TOT %.25f" % a, a.dtype
这是我得到的答案:
I 55197.0000000000000000000000000 <type 'numpy.float128'>
F 0.0007660185200000000195833 float128
TOT 55197.0007660185219720005989075 float128
结果与我所期望的(55197.0007660185200000000195833)相差11个十进制数字(总共16个有效数字)。我希望 128 位浮点数的精度更高。我究竟做错了什么?
此结果在 Mac 机器和 Linux 32 位机器上重现(在这种情况下,dtype 为 float96,但值完全相同)
在此先感谢您的帮助!
马泰奥