Bug in Decimal??

pleasedontspam at isp.com pleasedontspam at isp.com
Tue Apr 29 22:37:17 EDT 2014


Hello,
I believe I found a bug in the Decimal library. The natural logarithm results seem to be off in a certain range, as compared with Wolfram Alpha.

Here's an example:

from decimal import *
getcontext().prec=2016
one=Decimal(1)
number=Decimal('1e-1007')

partial=(one+number)/(one-number)

final.ln()


The result should be 2.00000... with all zeroes and 7 at the end. Instead, I'm getting 1.999999.. with 2 digits different at the end.

I checked that this happens for any 1e-N with N relatively large (above about 300 it starts showing bad digits at the end. 
Set the precision even higher and you'll see more digits off, it seems for number=10^-N, the error begins around 10^(-2N). The partial result (1+x)/(1-x) is correct to the number of digits specified, so it seems ln() is having accuracy problems.

Can other people confirm this or is it just my imagination? I tested with python 2.7.5 in XUbuntu, and also with my own build of mpdecimal 2.4.0 (latest, built from source). I compared the results with wolfram Alpha, and also with an open source arbitrary precision calculator, which matches Alpha results.




More information about the Python-list mailing list