2017-05-04 41 views
-2

这是代码,我想测量。我会喜欢一些帮助,我是编码新手。我想看看可以随机选择的两个函数之间的执行时间差异。我希望能够测量这2个函数的执行时间,但无法围绕它进行包围

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/time.h> 

int complex_func (int in) 
{ 
    int tmp1 ,i; 
    float tmp2 , tmp3 ; 
    for (i =0; i < 4112; i ++) 
    { 
     tmp1 = in*in*i; 
     tmp2 = (in+i)*(in+i)*(in+i); 
     tmp3 = tmp2/tmp1 ; 
    } 
    return tmp3 ; 
} 

int simple_func (int in) 
{ 
    int i,j=in; 
    for (i =0; i < 921; i ++) j = j+i; 
    return j; 
} 

main (int argc , char ** argv) 
{ 
    int i,j; 

    time_t sec; 

    for (i = 0; i < 350000; i ++) 
     if ((j = rand()) >0x3fffffff) 
      complex_func (j); 
     else simple_func (j); 
} 

在此先感谢!

+0

检查'RAND_MAX' – BLUEPIXY

+0

你想要每个循环的执行时间为350000?如果是这样的话,那是很多输出。您需要准确指定您要测量的内容。而且你还有main()中没有捕获的函数的返回值。 –

+0

鉴于'complex_func()'总是表现出未定义的行为,所以性能并不重要。 – EOF

回答

0

对于基本的措施看Execution time of C program

你可以用类似的东西应用到你的代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

double complex_time = 0.0; 
double simple_time = 0.0; 

int complex_func (int in) 
{ 
    clock_t begin = clock(); // Start the watch 

    int tmp1 ,i; 
    float tmp2 , tmp3 ; 
    for (i =0; i < 4112; i ++) 
    { 
     tmp1 = in*in*i; 
     tmp2 = (in+i)*(in+i)*(in+i); 
     tmp3 = tmp2/tmp1 ; 
    } 

    clock_t end = clock(); // Stop the watch 
    double time_spent = (double)(end - begin)/CLOCKS_PER_SEC; // Calculate elapsed time 
    complex_time += time_spent; // Add to global 

    return tmp3 ; 
} 

int simple_func (int in) 
{ 
    clock_t begin = clock(); 

    int i,j=in; 
    for (i =0; i < 921; i ++) j = j+i; 

    clock_t end = clock(); 
    double time_spent = (double)(end - begin)/CLOCKS_PER_SEC;  
    simple_time += time_spent; 

    return j; 
} 

main (int argc , char ** argv) 
{ 
    int i,j; 

    for (i = 0; i < 350000; i ++) 
     if ((j = rand()) >0x3fffffff) 
      complex_func (j); 
     else simple_func (j); 

    printf("complex=%f\n", complex_time); // Print result 
    printf("simple=%f\n", simple_time); 
} 

BTW:取int溢出的照顾,因为它是不确定的

+0

非常感谢!您的解决方案确实帮助我了解它的工作原理。 –