3

WinPython 3.4.4.2 を使用すると、次の奇妙な結果が得られます。

>>> 2**-1075
5e-324

つまり、 と同じですが、 double float 表現ではゼロにする必要があります2**-1074アドレスhttps://www.python.org/shell/2**-1075の Python 3.5.1 では、期待どおり 0 を取得します。

何が問題なのかを理解するのを手伝ってくれる人はいますか?

ありがとうございました

4

2 に答える 2

1

ゼロより大きい、または小さい、再表現可能な最小の非正規化浮動小数点数は、5e-324および-5e-324です。

5e-324は、最小浮動小数点数 (2.2250738585072014e-308) を浮動小数点イプシロン (2.220446049250313e-16) で乗算することによって達成できる非正規化された最小値です。

import sys
print(sys.float_info.min*sys.float_info.epsilon) 

出力:

5e-324

シェル (Python 3.5.1) でも同じ結果が得られます。アドレスhttps://www.python.org/shell/はhttp://www.pythonanywhere.com/のコンソールを使用し、システムでのそのような操作を制御する可能性があります。

于 2016-07-10T17:50:06.160 に答える
0

2**-1074 は最小の非正規浮動小数点数です。2**-1075 は 0.0 のはずですが、Windows では、C の pow() 関数の動作により、そうではありません。興味深いことに、2**-1074 / 2 は 0.0 になります。また、math.ldexp(1, -1075) も 0.0 を返します。

于 2019-08-07T20:13:51.673 に答える