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 を取得します。
何が問題なのかを理解するのを手伝ってくれる人はいますか?
ありがとうございました
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 を取得します。
何が問題なのかを理解するのを手伝ってくれる人はいますか?
ありがとうございました
ゼロより大きい、または小さい、再表現可能な最小の非正規化浮動小数点数は、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/のコンソールを使用し、システムでのそのような操作を制御する可能性があります。
2**-1074 は最小の非正規浮動小数点数です。2**-1075 は 0.0 のはずですが、Windows では、C の pow() 関数の動作により、そうではありません。興味深いことに、2**-1074 / 2 は 0.0 になります。また、math.ldexp(1, -1075) も 0.0 を返します。