2016-10-07 7 views
1

でセリエを計算するために、製品をループ:は、私はPythonでセリエ以下の結果だけつもり計算だパイソン

enter image description here

だから、ここに私の関数は計算することです。

def compute(limit): 
    pi = 1 
    for i in range(1,limit): 
     pi = pi * ((4*(i**2))//(4*(i**2)-1)) 
    print(2*pi) 

compute(10000) /*returns 2*/ 

私はそれが愚かな質問であることを知っています。しかし、このスニペットで問題を解決することはできますか?あなたが//なく/を持って

+0

もっと速く収束するシリーズをご希望の場合は、http://stackoverflow.com/a/26478803/4014959をご覧ください。 –

答えて

0

は、あなたが分裂したかったが、

def compute(limit): 
    pi = 1 
    for i in range(1,limit): 
     pi = pi * ((4*(i**2))/(4*(i**2)-1)) # you had here // 
    print(2*pi) 

compute(10000) 

出力床部門を作っ:置くことによってフロートに

3.1415141108281714 
0

変更4Sの一つ。 //の後に//を//に変更します。これは、Pythonは浮動小数点数としてすべてを解釈します:

他の人がすでに述べたように
def compute(limit): 
    pi = 1 
    for i in range(1,limit): 
     pi = pi * ((4.*(i**2))/(4*(i**2)-1)) 
    print(2*pi) 

compute(10000) 
+0

あなたの優しさ... –

+0

Python 3では4を浮動小数点にする必要はありませんが、怪我はしません。 –

+0

ああ、そうです、私はまだPython 2.7.xを使用しますが、実際にはPython 3ではそれを行う必要はありません。 –

1

//は、整数の除算です。浮動小数点数を問わず、結果は常に整数になります。 Piは整数ではないので、浮動小数点除算:/を使用して、数値のうちの1つを浮動小数点に変換することによって実際に浮動小数点数を求めることをPythonに明示してください。*たとえば、4 - >4.(ドットに気付く)を行うことができます。

functoolsモジュールとoperatorモジュールとジェネレータ式を使用すると、同じことをより明確に行うことができます。

import functools 
import operator 

def compute(limit): 
    return 2 * functools.reduce(operator.mul, ((4.*(i**2)/(4*(i**2)-1) for i in range(1, limit + 1)) 

* Pythonの3も、このことなく4/(something)とフロート分割を行いますが、Pythonの2.7は、そうでなければ分割は任意の方法で整数になり、として自由にパイソン3として分割するfrom __future__ import divisionが必要になります。

関連する問題