erros do domínio de matemática python em matemática.função de Registo

tenho de usar a função Python math.log(x) com valores de x de (0, ..., 1). Às vezes x pode estar muito perto de zero, e Python me dá um erro:

erro de valor: domínio matemático

Como posso saber, qual é o domínio de definição da função math.log?

 14
Author: Felix, 2013-09-30

2 answers

Desde que a sua entrada esteja dentro do intervalo semi-aberto (0, 1] (não incluindo 0), está bem. Você não pode estar muito perto de zero:

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

Então, simplesmente verificar exatamente zero (talvez como resultado de um fluxo) deve ser suficiente, ou alternativamente pegar a exceção e lidar com ele.

Editar : isto também vale para o número mínimo de vírgula flutuante denormal:

>>> math.log(sys.float_info.min * sys.float_info.epsilon)
-744.4400719213812
 12
Author: Sven Marnach, 2013-09-30 14:16:22

Está a rever a precisão suportada, utilize a classe Decimal em alternativa.

>>> 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')
 4
Author: ismail, 2013-09-30 13:50:04