2017-03-23 6 views
0

私はPythonでゼロの対数をしようとしています。Pythonのゼロの対数

from math import log 
log(0) 

これで例外が発生します。

ValueError: math domain error 

私は負の数のlogが数学的に定義されていないことを理解し、PythonのlogこのValueError例外を発生させることができます理由です。しかし、ゼロ値で呼び出すと例外が発生するのはなぜですか?それは-infという値を返すはずです。無限の数をPython(as in here)で表すことができます。

私はこの問題を個人的に扱わずに処理できますか?私はこのようなことをするときに個人的に意味します。

from math import log, inf 
foo = ... # Random value. 
if foo != 0: return log(foo) 
else: return -inf 
+0

foo> 0なら 'log(foo)else -inf'はうまくいくようです – BallpointBen

+3

_Itは' -inf'値を返します。いいえ、そうしてはいけません。 'log(0)'は-infと等しくありません。それは限界に近い "0に近い"傾向がありますが、値自体は未定義です。 –

+0

負の値を '-inf'にも変換し、制限付きであっても正しくない@not_a_robot – Adirio

答えて

5

実際にはPythonは間違っていません。ゼロの対数は、それが限界だし、それが唯一の右からではなく、左から-infだからである、また、定義されていません:

enter image description here

だから、いいえ、あなたはこれを自分で対処しなければなりません。それは間違っていますが、あなたはそれを行うことができます。このようなもの:log(x) if x != 0 else -inf

+0

負の数値を扱うと、-infも返す – Adirio

+0

x!= 0の場合はlog(x)else -inf'私は、 '-inf'の値が受け入れられる正しい考え方を捉えていると思います。それは(正しく)負の 'x'の例外を発生させます。 – chepner