使用python中的十进制模块精确地乘以100,000十进制数字

时间:2013-07-14 06:22:43

标签: python python-3.x decimal

我将使用python 3非常精确地计算pi的值。 为此,我首先需要 426880 *(10005)^ 0.5 的精确值 现在,使用

>>> from decimal import *

>>> getcontext().prec = 100000

>>> Decimal(10005).sqrt()

我得到了10005的root值 精确到100,000个数字。 但是,当我尝试将此乘以426880时使用:

>>> from decimal import *

>>> getcontext().prec = 1000000

>>> Decimal(426880) * Decimal(x)

x是10005的根,精确计算为100,000位 我只得到一个28位数而不是指定的精度。 如何精确地乘以这些值?

2 个答案:

答案 0 :(得分:0)

我认为您的问题是,您要么将x保存在字符串中并重新解释,要么您之前的计算中的x为Decimal,而您正在执行Decimal(A_Decimal)。如果x已经是十进制,则不要重新解释它,如果节省时间则保存,然后使用picklecpickle将其保存为对象。 BTW尽量避免import * - 使用名称空间。

顺便说一下,确保在从任何地方导入x之前设置当前精度

答案 1 :(得分:-1)

我认为问题是当你做

 >>> Decimal(426880) * Decimal(x)

它被Python解释为

>>> Decimal(426880) * Decimal(float(x))

首次声明x时,请确保将其声明为Decimal而不是float点数。 我可能非常错误,但我认为你应该检查你的代码,看看你是否可以这样做。