math.log 関数の Python 数学ドメイン エラー

Rohan Timalsina 2023年10月10日
math.log 関数の Python 数学ドメイン エラー

Python では、関数が有効な引数を受け取ると ValueError が発生しますが、それは不適切な値です。 たとえば、sqrt() 関数に負の数を指定すると、ValueError が返されます。

同様に、math.log() 関数で指定された値が 0 または負の数の場合、ValueError をスローします。 このチュートリアルでは、Python で ValueError: math domain error を解決する方法を説明します。

Python を使用した関数 math.logValueError: math domain error を修正する

math.log() 関数は、数値の自然対数または底に対する数値の対数を計算します。 math.log() の構文は次のとおりです。

math.log(x, base)

ここで、x は対数が計算される必須の値で、base はオプションのパラメータです。 math モジュールをインポートした後、math.log() 関数を使用できます。

math.log() 関数にゼロ値の負の数を渡すと、ValueError が返されます。 これは、そのような数値の対数が数学的に定義されていないためです。

import math

print(math.log(-2))

出力:

Traceback (most recent call last):
  File "c:\Users\rhntm\myscript.py", line 2, in <module>
    print(math.log(-2))
ValueError: math domain error

このエラーは、有効な入力値を math.log() 関数に渡すことで解決できます。

import math

print(math.log(2))

出力:

0.6931471805599453

decimal モジュールを使用して、ゼロに近い値を math.log() 関数に渡すことができます。 Decimal クラスの ln メソッドは、10 進数値の自然対数を計算します。

import math
import decimal

num = decimal.Decimal("1E-1024")
print(math.log(num))

出力:

Traceback (most recent call last):
  File "c:\Users\rhntm\myscript.py", line 5, in <module>
    print(math.log(num))
ValueError: math domain error

それでは、Decimal ln() メソッドを使用してみましょう。

from decimal import Decimal

num = Decimal("1E-1024")
print(num.ln())

出力:

-2357.847135225902780434423250

これで、Python の math.log() 関数で ValueError: math domain error が発生する理由がわかりました。 関数で無効な入力値を使用すると ValueError が発生しますが、これは関数に有効な値を渡すことで解決できます。

著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

関連記事 - Python Error