おはようございます、
FITS ファイル (単一の数値の整数部分と浮動小数点部分を表す) から 2 つの数値を読み取り、それらを long double (私のマシンでは 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
結果は、10 進数 11 桁 (合計で有効桁数 16 桁) の後で、私が期待するもの (55197.0007660185200000000195833) とは異なります。128 ビットの浮動小数点数からは、はるかに優れた精度が期待できます。私は何を間違っていますか?
この結果は、Mac マシンと Linux 32 ビット マシンで再現されました (その場合、dtype は float96 でしたが、値はまったく同じでした)。
よろしくお願いします。
マッテオ