Witam!
Potrzebuje pomocy w określeniu "złożoności obliczeniowej" algorytmu liczącego liczbę Eulera jako sumy szeregu. Zamieszczam poniżej kod programu realizujący to zadanie. Czy można zoptymalizować ten algorytm ? będę wdzięczny za wskazówki, pomoc cokolwiek :)
pozdrawiam!
#include <iostream>
#include <math.h>
#include <windows.h>
using namespace std;
double suma=1, powr=1;
double wartosc_biezaca, wartosc_poprzednia, dokladnosc, zadanaDokladnosc=0.001;
int freq, start, end, diff;
double czas;
float silnia(int n);
int i=1;
int main()
{
cout.precision(30);
cout.setf(ios::fixed,ios::floatfield);
wartosc_poprzednia = wartosc_biezaca = 1.0;
QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
QueryPerformanceCounter((LARGE_INTEGER*)&start);
//////////////////////////////////////////////////////////////////
do
{
powr= silnia(i);
suma += 1.0/powr;
cout<< dokladnosc<<endl;
wartosc_poprzednia = wartosc_biezaca;
wartosc_biezaca = wartosc_biezaca+1/powr;
dokladnosc = fabs(wartosc_poprzednia - wartosc_biezaca);
i++;
}while(dokladnosc>=zadanaDokladnosc);
/////////////////////////////////////////////////////////////////
QueryPerformanceCounter((LARGE_INTEGER*)&end);
diff = ((end - start) * 1000) / freq;
unsigned int milliseconds = (unsigned int)(diff & 0xffffffff);
cout <<"e : "<<suma;
cout <<" milliseconds: "<<milliseconds <<endl;
system("PAUSE > null");
return 0;
}
float silnia(int n)
{
float s=1;
for ( int i=1;i<=n;i++)
{
s = s * i;
}
return s;
}