需要计算pi到30位,但在第15位后它们都会失败

时间:2014-01-25 20:36:58

标签: python while-loop series

我在python中遇到系列计算的问题,它们在第15位后都失败了。我正在使用Canopy。

例如

3.1415926535897932384626433832795028841971693993751实际pi 3.14159265358979444826559301873203366994857788085938我的结果 3.1415926535897932384626433832795028841971XXXXXXXXXX问题

等式16arctan(1/5) - 4arctan(1/239):

    # For Machin
    mm = 0.
    totalm1 = 0.
    while mm <= 100:
        machin1 = (16.)*(-1)**(mm)*((1./5)**(1+2.*mm))/(2.*mm+1) -(4.)*(-1)**(mm)*((1./239)**(1+2.*mm))/(2.*mm+1)
        totalm1 += machin1
        mm += 1
    print "%50.50f" %totalm1

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

浮点数只有大约15位精度。如果需要更多有效数字,请使用任意精度数学库。内置的decimal模块可能是合适的,或者您可以尝试mpmath,它似乎有更多功能。

使用decimal模块计算2的平方根的示例:

>>> import decimal
>>> decimal.getcontext().prec = 50 # Compute with 50 digits of precision
>>> decimal.Decimal('2') ** decimal.Decimal('0.5')
Decimal('1.4142135623730950488016887242096980785696718753769')