Pythonで小数部を5桁または7桁で切り捨てる方法はありますか?
そうでない場合、e**(-x) のような float のサイズが大きくなりすぎないようにするにはどうすればよいですか?
ありがとう
Pythonで小数部を5桁または7桁で切り捨てる方法はありますか?
そうでない場合、e**(-x) のような float のサイズが大きくなりすぎないようにするにはどうすればよいですか?
ありがとう
をキャッチするか、モジュールOverflowError
を使用してください。decimal
Python は、オーバーフローに問題がないと想定しません。
>>> 0.0000000000000000000000000000000000000000000000000000000000000001**-30
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')
>>> d = decimal.Decimal(0.0000000000000000000000000000000000000000000000000000000000000001)
>>> d**-30
Decimal('1.000000000000001040827834994E+1920')
「結果が大きすぎる」とは、数値の 10 進数表現の文字数を指すものではありません。つまり、指数関数から得られた数値が、Python が浮動小数点値を格納するために内部で使用する型が何であれ、オーバーフローするのに十分な大きさであることを意味します。
浮動小数点計算を処理するために別の型を使用するか、e**(-x) がオーバーフローまたはアンダーフローしないようにコードを修正する必要があります。
これはうまくいくようです
from decimal import *
getcontext().prec = 7
math.exp(- Decimal(x))