2017-05-04 67 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

非常感謝!您的解決方案確實幫助我瞭解它的工作原理。 –