从mpf转换为Sympy Float而不会丢失精度

时间:2016-05-06 21:00:46

标签: python sympy mpmath

有没有办法做到这一点?例如,在下面的代码中,我失去了精度:

>>> from sympy import *
>>> from sympy.mpmath import *
>>> mp.dps = 50
>>> a = mpf('1.0')/mpf('3.0')
>>> a
mpf('0.33333333333333333333333333333333333333333333333333311')
>>> b = Float(a,50)
>>> b
0.33333333333333331482961625624739099293947219848633

2 个答案:

答案 0 :(得分:2)

首先转换为字符串似乎可以解决问题:

>>> from sympy import *
>>> from sympy.mpmath import *
>>> mp.dps = 50
>>> a = mpf('1.0')/mpf('3.0')
>>> a
mpf('0.33333333333333333333333333333333333333333333333333311')
>>> b = Float(a,50)
>>> b
0.33333333333333331482961625624739099293947219848633
>>> b = Float(str(a),50)
>>> b
0.33333333333333333333333333333333333333333333333333

答案 1 :(得分:2)

sympify(a)做对了。 Float(a)也应该有效,但似乎there is a bug