Pythonで-1200の指数を計算しようとしています(これは例です。特に-1200は必要ありませんが、-1200前後の数値のコレクションは必要ありません)。
>>> math.exp(-1200)
0.0
アンダーフローが発生しています。この問題を回避するにはどうすればよいですか?
助けてくれてありがとう:)
Pythonで-1200の指数を計算しようとしています(これは例です。特に-1200は必要ありませんが、-1200前後の数値のコレクションは必要ありません)。
>>> math.exp(-1200)
0.0
アンダーフローが発生しています。この問題を回避するにはどうすればよいですか?
助けてくれてありがとう:)
decimal
標準ライブラリでは、モジュールを見ることができます:
>>> import decimal
>>> decimal.Decimal(-1200)
Decimal('-1200')
>>> decimal.Decimal(-1200).exp()
Decimal('7.024601888177132554529322758E-522')
サポートされているよりも多くの機能が必要な場合は、私が使用していてとても気に入っているdecimal
ライブラリを見ることができます。mpmath
>>> import mpmath
>>> mpmath.exp(-1200)
mpf('7.0246018881771323e-522')
>>> mpmath.mp.dps = 200
>>> mpmath.exp(-1200)
mpf('7.0246018881771325545293227583680003334372949620241053728126200964731446389957280922886658181655138626308272350874157946618434229308939128146439669946631241632494494046687627223476088395986988628688095132e-522')
ただし、可能であれば、対数空間で完全に機能するように方程式を再キャストできるかどうかを確認する必要があります。
可能な限り対数領域で計算してみてください。つまり、正確な値を計算することは避けますが、指数で作業を続けます。
exp(-1200) は非常に小さい数値です (exp(1200) が非常に大きな数値であるのと同様に) ため、正確な値は実際には関心のあるものではない可能性があります。これらの数値のみを比較する必要がある場合は、対数スペースは十分なはずです。