我制作了一个程序来计算pi(虽然有点乐趣,但我不想使用Python 3.3.2中内置的pi)。它工作正常 - 它获得pi的正确值,最多7位小数。但是,一旦达到这一点,程序将继续,但值不会改变。我已经尝试使用decimal.Decimal,但它不起作用 - 它出现以下错误:
TypeError:+:' decimal.Decimal'不支持的操作数类型并且'浮动'
这是我的工作代码(使用浮点数而不是小数。)我只包含了实际的算法:
pi=float(3)
a=2
b=0
c=float(0)
while 1==1:
b=a*(a+1)*(a+2)
c=4/b
pi=pi+c
print(str(pi))
a=a+2
b=a*(a+1)*(a+2)
c=4/b
pi=pi-c
print(str(pi))
a=a+2
这就是结果: http://i.imgur.com/y0qgBMB.png(抱歉,我没有足够的声誉直接发布图片)
请注意,该程序实际上比此更早停止工作,我只是将它留在那里一段时间。
我知道我使用的算法能够将pi发现到更多的小数位,所以有人可以告诉我为什么它不起作用,并给我任何可能的解决方案?
正如您可能从我的代码的简单性中注意到我不太擅长python - 只有我在学校教过的基本知识。非常感谢简单的解决方案!
编辑
这是带有Decimal的非工作代码,以及Jasper的建议。
import decimal
pi=decimal.Decimal(3)
a=2
b=0
c=decimal.Decimal(0)
while True:
b=a*(a+1)*(a+2)
c=4/b
pi=pi+c
print(str(pi))
a=a+2
b=a*(a+1)*(a+2)
c=4/b
pi=pi-c
print(str(pi))
a=a+2
这是错误:
追踪(最近一次通话): 文件" C:\ Users ... \ fastpi2.py",第9行,in pi = pi + c TypeError:+:' decimal.Decimal'不支持的操作数类型并且'浮动'
答案 0 :(得分:0)
您的代码失败,因为两个整数的划分导致浮点(在Python 3中):
>>> from decimal import Decimal
>>> pi = Decimal(3)
>>> a=2
>>> b=a * (a+1) * (a+2)
>>> c=4/b
>>> type(c)
<class 'float'>
>>> pi = pi + c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'Decimal' and 'float'
以下作品:
>>> a = Decimal(2)
>>> one = Decimal(1)
>>> b = a * (a+one) * (a+one+one)
>>> c = Decimal(4) / b
>>> type(c)
<class 'decimal.Decimal'>
>>> pi = pi + c
>>> pi
Decimal('3.166666666666666666666666667')