Manejo de números muy pequeños en python

Actualmente estoy trabajando con números muy pequeños en mi progtwig de python, por ejemplo

x = 200 + 2e-26 

Una solución es trabajar con valores logarítmicos que aumenten el rango de mi valor flotante. El problema es que también tengo que hacer un pie con estos valores y, por lo tanto, el uso del enfoque logarítmico no es utilizable (y el módulo Decimal tampoco). ¿Hay otra manera de resolver ese problema?

Edición: Mi problema con el módulo decimal es: ¿Cómo puedo manejar valores imaginarios? Intenté a = Decimal(1e-26)+Decimal(1e-26*1j) y a = Decimal(1e-26)+Decimal(1e-26)*1j , y ambas formas fallaron (error en la solicitud).

Considere probar el paquete mpmath .

 >>> from mpmath import mpf, mpc, mp >>> mp.dps = 40 >>> mpf(200) + mpf(2e-26) + mpc(1j) mpc(real='200.0000000000000000000000000200000000000007', imag='1.0') 

Mayormente precisa y puede manejar números complejos, más detalles en la documentación .

Aunque numpy admite más tipos decimales (y también versiones complejas), no ayudan:

 >>> import numpy >>> numpy.longfloat  >>> a = numpy.array([200, 2e-26], dtype=numpy.longfloat) >>> a array([ 200.0, 2e-26], dtype=float128) >>> a.sum() 200.0 >>> a = numpy.array([200, 2e-26], dtype=numpy.longdouble) >>> a.sum() 200.0 

El motivo se explica aquí : Internamente, el numpy usa 80 bits, lo que significa una mantisa de 63 bits que solo admite 63/3 = 21 dígitos.

Lo que necesitas es un tipo de flotador de 128 bits real como el de boost .

Pruebe el módulo Boost.Python , que podría darle acceso a este tipo. Si eso no funciona, entonces tendrá que escribir su propia clase contenedora en C ++ como se explica aquí .