In the following 2 examples:
Example 1:
from decimal import Decimal, getcontext
getcontext().prec = 1000
d = Decimal(1+10**(-24))
1/d.ln()
Example 2:
from mpmath import *
mp.dps = 1000
mp.pretty=True
1/(ln(1+10**(-24)))
I get the ZeroDivisionError
. Python 3.7(64-bit)
takes it as 1/ln(1)
or 1/0
.
How I can make Python read it as 1/ln(1+10^(-24))
not 1/ln(1)
?
Decimal
resulting from operations between Decimal
:d = Decimal(1) + Decimal(10) ** Decimal(-24) # Decimal('1.000000000000000000000001')
Decimal(1) / d.ln()
otherwise you'd get a primitive type float
precision first, and the number rounded to 1.0:
1+10**(-24) # 1.0
Decimal(1+10**(-24)) # 1
from mpmath import mp, mpf, ln
mp.dps = 1000
mp.pretty = True
mpf(1) / ln(mpf(1) + mpf(10) ** mpf(-24))