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
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