2016-09-20 8 views
0

指数近似和を求めるために特定のアルゴリズムを使用すると、いくつのFLOPがあるかを理解しようとしています。 factorial(n)はPythonで使われます。私はバイナリ操作のためのFLOPsを理解しているので、ここでも関数内のバイナリ操作も階乗ですか?コンピュータサイエンス専攻ではないので、私はこれらの問題をいくつか持っています。私のコードは次のようになります:pythonでmath.factorial(n)を使用して階乗を計算する際にいくつのFLOPがあるか

from __future__ import division 
import numpy as np 
import matplotlib.pyplot as plt 
import math 



x = input ("please enter a number for which you want to run the exponential summation e^{x}") 
N = input ("Please enter an integer before which term you want to turncate your summation") 

function= math.exp(x) 
exp_sum = 0.0 
abs_err = 0.0 
rel_err = 0.0 



for n in range (0, N): 
    factorial = math.factorial(n)   #How many FLOPs here? 
    power  = x**n       # calculates N-1 times 
    nth_term = power/factorial    #calculates N-1 times 
    exp_sum = exp_sum + nth_term   #calculates N-1 times 
    abs_err = abs(function - exp_sum) 
    rel_err = abs(abs_err)/abs(function) 

これを理解してください。私は他のFLOPについても間違っているかもしれません!

+0

コードにはいくつかの問題があります: 'x'は定義されておらず、' function = math.exp(x) 'は不明で再利用はしません。明確にできますか? – jadsq

+0

私のコードを更新しました。見てください – bhjghjh

+0

典型的なNは何ですか?最大Nとは何ですか? – osgx

答えて

1

そのSO answerおよびC source codeによれば、python2.7 math.factorial(n)では階乗として n個の操作についてを使用して計算するように階乗を計算するためにナイーブなアルゴリズムを使用して(N)= 1 * 2 * 3 * 4 *。 .. * n。残りについて

小さなミスはfor n in range(0,N)その意志ループがNある、ないN-1n=0からn=N-1まで)。

最後の注意点は、FLOPを数えることは、特にPythonの実際のアルゴリズムの実世界のパフォーマンスを表すものではなく、コンパイルされたCコードにリンクする賢明な構文の裏側の作業のほとんどを隠す傾向があることです(例:exp_sum + nth_termは実際にはexp_sum.__add__(nth_term)です)。

+0

は多く説明しました、ありがとう – bhjghjh

関連する問題