#include #include #include using namespace std; void Add(int x,int y); void Sub(int x,int y); #define AddState 11 #define SubState 0 double CalcAvg(int run,double CurAvg,long int newVal){ if(run ==0) return newVal; newVal = newVal/((double)run+1.0); CurAvg = CurAvg*((double)run)/((double)run+1.0); return newVal + CurAvg; } int main() { clock_t start, finish; long int duration; int state; double protoavg,ifavg,switchavg; protoavg=ifavg=switchavg=0; unsigned long end = 120000000; unsigned long swit = end/3; void (* fun)(int x,int y); for(int y=0;y<20;y++){ /* start = clock (); fun = Add; for (unsigned long i = 0; i <= swit; ++i) { fun(1,2); } fun = Sub; for(unsigned long i = swit; i <= end; ++i){\ fun(1,2); } finish = clock (); duration = finish - start; protoavg = CalcAvg(y,protoavg,duration); printf ("Function ProtoTypes actual:%ld %5f\n", duration,protoavg); ///////////////// start = clock (); state = AddState; for (unsigned long i = 0; i <= swit; ++i) { if(state == SubState){ Sub(1,2); } else if(state ==2); else if(state ==3); else if(state ==4); else if(state ==5); else if(state ==6); else if(state ==7); else if(state ==8); else if(state ==9); else if(state==AddState){ Add(1,2); } } state = SubState; for(unsigned long i = swit; i <= end; ++i){\ if(state == SubState){ Sub(1,2); } else if(state ==2); else if(state ==3); else if(state ==4); else if(state ==5); else if(state ==6); else if(state ==7); else if(state ==8); else if(state ==9); else if(state==AddState){ Add(1,2); } } finish = clock (); duration = finish - start; ifavg = CalcAvg(y,ifavg,duration); printf ("if else actual:%ld %5f\n\n", duration,ifavg); */ ///////////////// start = clock (); state = AddState; for (unsigned long i = 0; i <= swit; ++i) { switch (state){ case SubState: Sub(1,2); break; case AddState: Add(1,2); break; } } state = SubState; for(unsigned long i = swit; i <= end; ++i){\ switch (state){ case SubState: Sub(1,2); break; case AddState: Add(1,2); break; } } finish = clock (); duration = finish - start; ifavg = CalcAvg(y,ifavg,duration); printf ("if else actual:%ld %5f\n\n", duration,ifavg); } int x; cin >> x; return 0; } void Add(int x,int y){ x= x+y; } void Sub(int x,int y){ x=x-y; }