Errores de dominio de Python Math en la función math.log

Tengo que usar la función math.log(x) Python con valores de x de (0, …, 1). A veces, x puede estar muy cerca de cero, y Python me da un error:

ValueError: error de dominio matemático

¿Cómo puedo saber cuál es el dominio de definición de la función math.log ?

Siempre que su entrada esté dentro del intervalo medio abierto (0, 1] (sin incluir 0), está bien. No puede estar muy cerca de cero:

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

Por lo tanto, basta con verificar exactamente el cero (tal vez como resultado de un subdesbordamiento) o, alternativamente, detectar la excepción y manejarla.

EDITAR : Esto también es válido para el número de punto flotante mínimo denormal:

 >>> math.log(sys.float_info.min * sys.float_info.epsilon) -744.4400719213812 

Usted va sobre la precisión soportada, use la clase decimal en su lugar.

 >>> from math import log >>> from decimal import Decimal >>> d = Decimal('1E-1024') >>> log(d) Traceback (most recent call last): File "", line 1, in  ValueError: math domain error >>> d.ln() Decimal('-2357.847135225902780434423250')