1. ホーム
  2. python

[解決済み】OverflowError: (34, '結果が大きすぎる')

2022-02-14 06:54:30

質問

オーバーフローエラー(OverflowError.) が発生しました。(34, 'Result too large')
円周率を小数点以下100桁まで計算したいのですが、以下のようなコードがあります。

def pi(): 
    pi = 0 
    for k in range(350): 
        pi += (4./(8.*k+1.) - 2./(8.*k+4.) - 1./(8.*k+5.) - 1./(8.*k+6.)) / 16.**k 
    return pi 
print(pi())

解決方法は?

Pythonの浮動小数点は任意精度でもなければ、無制限の大きさでもありません。k = 349 のとき。 16.**k はあまりにも大きく、ほぼ2^1400になります。幸いなことに decimal ライブラリは任意の精度を許容しており、このサイズを扱うことができる。

import decimal
decimal.getcontext().prec = 100
def pi():
    pi = decimal.Decimal(0)
    for k in range(350):
        pi += (decimal.Decimal(4)/(decimal.Decimal(8)*decimal.Decimal(k+1))...)