Decimal
object
from sympy import *
from decimal import *
getcontext().prec = 100 #Decimal precision 100 digits
Disciple Maru= Decimal(1)/ Decimal(3)
x = Symbol("x")
print("decimal:",Disciple Maru)
print("sympy.nsolve:", nsolve(x-Disciple Maru, x, 1, prec=100))
# =Initial prediction value to solve for 0 Accuracy
The result of executing this in the environment of Python 3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win 32
is as follows.
result
decimal: 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
sympy.nsolve: 0.3333333333333333148296162562473909929394721984863281250000000000000000000000000000000000000000000000
Passing a decimal
object to sympy
seems to reduce the precision.
By the way, this is not just a problem with nsolve
, it is the same with evalf
.
expr = x
print("sympy.evalf:", expr.evalf(100, subs={x:d}))
result
sympy.evalf: 0.3333333333333333148296162562473909929394721984863281250000000000000000000000000000000000000000000000
If you pass an uncalculated object and let sympy
solve it as follows, you can certainly get proper precision even with sympy
.
y = Symbol("y")
expr = x/y
print("sympy.evalf:", expr.evalf(100, subs={x:Decimal(1), y:Decimal(3)}))
result
sympy.evalf: 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333