2017-05-04 3 views
-2

Ceci est le code et je veux mesurer. J'aimerais beaucoup de l'aide, je suis nouveau au codage. Je veux voir la différence de temps d'exécution entre les deux fonctions qui peuvent être sélectionnées au hasard.Je veux être capable de mesurer le temps d'exécution de ces 2 fonctions mais ne peux pas envelopper ma tête autour de lui

#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); 
} 

Merci d'avance!

+0

Check 'RAND_MAX' – BLUEPIXY

+0

vous voulez le temps d'exécution pour chaque boucle de 350000? Si c'est le cas, c'est beaucoup de rendement. Vous devez spécifier exactement ce que vous voulez mesurer. Et vous avez également des valeurs de retour de fonctions que vous ne capturez pas dans main(). –

+0

Étant donné que 'complex_func()' présente toujours un comportement indéfini, la performance n'a pas d'importance. – EOF

Répondre

0

Pour la mesure de base voir Execution time of C program

Vous pouvez l'appliquer à votre code avec quelque chose comme:

#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: Prenez soin de int trop-plein car il est non défini

+0

Merci beaucoup! Votre solution m'a vraiment aidé à comprendre comment cela fonctionne. –