27

(0, ..., 1)のxの値でPythonmath.log(x)関数を使用する必要があります。x がゼロに近すぎる場合があり、Python でエラーが表示されます。

ValueError: 数学ドメイン エラー

math.log関数の定義域とは何か、どうすれば知ることができますか?

4

2 に答える 2

26

入力が半開間隔 (0, 1] (0 を含まない) 内にある限り、問題ありません。ゼロに近すぎることはできません。

>>> math.log(sys.float_info.min)
-708.3964185322641

そのため、(おそらくアンダーフローの結果として) 正確にゼロをチェックするだけで十分なはずです。または、代わりに例外をキャッチして処理します。

EDIT : これは、非正規化最小浮動小数点数にも当てはまります。

>>> math.log(sys.float_info.min * sys.float_info.epsilon)
-744.4400719213812
于 2013-09-30T13:51:10.243 に答える
6

サポートされている精度を超えています。代わりにDecimalクラスを使用してください。

>>> from math import log
>>> from decimal import Decimal

>>> d = Decimal('1E-1024')
>>> log(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> d.ln()
Decimal('-2357.847135225902780434423250')
于 2013-09-30T13:50:04.023 に答える