为什么我的程序 "stopped" 有效?

Why has my program "stopped" working?

我在 Python 3.3.2 中编写了一个计算圆周率的程序(只是为了好玩,我不想使用内置的圆周率)。它工作正常 - 它获得了小数点后 7 位的 pi 的正确值。然而,一旦到达这一点,程序将继续,但值不会改变。我试过使用 decimal.Decimal,但它不起作用 - 它出现以下错误:

TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'

这是我的工作代码(使用浮点数而不是小数。)我只包含了实际的算法:

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(抱歉,我没有足够的声誉直接 post 图片)

请注意,该程序实际上比这早得多停止工作,我只是把它放在那里一会儿。 我知道我使用的算法能够找到更多小数位的圆周率,所以有人可以告诉我为什么它不起作用,并给我任何可能的解决方案吗? 正如您可能从我的代码的简单性中注意到的那样,我不太擅长 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 这是错误:

Traceback (most recent call last): File "C:\Users...\fastpi2.py", line 9, in pi=pi+c TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'

您的代码失败,因为两个整数相除得到一个浮点数(在 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')