2016-09-20 6 views
0

J'essaie de comprendre combien de FLOPs y a-t-il si j'utilise un certain algorithme pour trouver la somme approximative exponentielle, spécialement si j'utilise les maths. factoriel (n) en python. Je comprends FLOPs pour le fonctionnement binaire, est donc aussi factorielle une opération binaire ici dans une fonction? N'étant pas un major en informatique, j'ai quelques difficultés avec ceux-ci. Mon code ressemble à ceci:Combien de FLOPs y a-t-il dans le calcul d'une factorielle en utilisant math.factorial (n) en python?

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) 

Aidez-moi à comprendre ceci. Je pourrais aussi me tromper sur les autres FLOP!

+0

Il y a quelques problèmes avec votre code: 'x' n'est pas défini et' function = math.exp (x) 'n'est pas clair et n'est jamais réutilisé. Pourriez-vous clarifier? – jadsq

+0

J'ai mis à jour mon code, s'il vous plaît jeter un oeil – bhjghjh

+0

Quel est le N typique? Quel est le maximum de N? – osgx

Répondre

1

Selon cette SO answer et à la C source code, dans python2.7 math.factorial(n) utilise un algorithme naïf pour calculer la factorielle de sorte il calcule en utilisant environ n opérations comme factoriel (n) = 1 * 2 * 3 * 4 *. .. * n.

Une petite erreur en ce qui concerne le reste est que for n in range(0,N) bouclera N fois, non N-1 (de n=0 à n=N-1). Une note finale est que le comptage de FLOP peut ne pas être représentatif des performances du monde réel de l'algorithme, en particulier dans Python qui est un langage interprété et qui tend à cacher la plupart de son fonctionnement interne derrière une syntaxe intelligente qui lie au code C compilé (Par exemple: exp_sum + nth_term est actuellement exp_sum.__add__(nth_term)).

+0

a beaucoup expliqué, merci – bhjghjh