math.log函数中的python数学域错误

Fel*_*lix 19 python math

我不得不使用Python math.log(x)函数的值X从(0,...,1).有时x可能太接近于零,Python给我一个错误:

ValueError:数学域错误

我怎么知道,math.log函数定义的领域是什么?

Sve*_*ach 18

只要您的输入在半开区间(0,1)(不包括0)内,您就可以了.您不能太接近零:

>>> math.log(sys.float_info.min)
-708.3964185322641
Run Code Online (Sandbox Code Playgroud)

因此,简单地检查零(可能是下溢的结果)应该足够,或者捕获异常并处理它.

编辑:这也适用于非正规的最小浮点数:

>>> math.log(sys.float_info.min * sys.float_info.epsilon)
-744.4400719213812
Run Code Online (Sandbox Code Playgroud)


ism*_*ail 5

您要遍历支持的精度,请改用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')
Run Code Online (Sandbox Code Playgroud)