2017-04-14 57 views
0

我在一个项目的第一步工作,我要计算求和和乘法的执行时间......我写的总和下一代码:错误 - 时间已经在C

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

int main(int argc, char const *argv[]) { 
    long muestras = 100000000; 
    long resultado=0; 
    float inicial = clock(); 
    printf("Tiempo inicial: %f\n",inicial); 
    for(int i = 1; i <muestras;i+=1){ 
    resultado = resultado + i; 
    } 
    float final = clock(); 
    printf("Tiempo final: %f\n",final); 
    float total = (final-inicial)/((double)CLOCKS_PER_SEC); 
    printf("tiempo = %f",total); 
    //printf("tiempo = %f",((double)clock() - start)); 
    printf("\n"); 
    printf("resultado = %d",resultado); 
    return 0; 
} 

和完美的工作,但我写的乘法下一个代码,以及最初与最终的时间是0 ......我不知道为什么,我无法理解......

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

int main(int argc, char const *argv[]) { 
    long muestras = 10; 
    long long resultado=1; 
    float inicial = clock(); 
    printf("Tiempo inicial: %f\n",inicial); 
    for(int i = 1; i <muestras;i+=1){ 
    if (resultado>20) { 
     resultado = (resultado * i)/20; 
    }else{ 
     resultado = resultado * i; 
    } 
    } 
    float final = clock(); 
    printf("Tiempo final: %f\n",final); 
    float total = (final-inicial); 
    ///((double)CLOCKS_PER_SEC); 
    printf("tiempo = %f",total); 
    //printf("tiempo = %f",((double)clock() - start)); 
    printf("\n"); 
    printf("resultado = %lli",resultado); 
    return 0; 
} 

我知道有溢出,但无论样本量多大,结果都是一样的....请帮助...对不起我的英语不好,来自C olombia! :)

回答

1

clock的返回值类型为clock_t,而不是float。此外,返回值不是秒或任何其他数据,而是“时钟”,您可以通过每秒时钟数除以秒数来转换为秒数。

你应该做这样的事情,而不是:

clock_t initial = clock(); 
... 
clock_t final = clock(); 
double total = (final - initial)/(double)CLOCKS_PER_SEC; 
printf("time delta = %f", total); 

注意there is no way of printfing a value of type clock_t correctly

+0

感谢您的回答,它适用于求和,但我有同样的问题与乘法....我增加“muestras”为100但答案是0和时间0太... –

0

clock()的返回值的类型为clock_t而不是float,它代表自程序开始以来的滴答数。您应该减去它们,然后转换为双倍以CLICKS_PER_SEC进行除法,就像在Antti的答案中一样。此外,您的乘法程序只执行10 muestras,这意味着它可能会在第一个时钟周期完成。将其增加到很大数量,您可能会看到不同的经过时间。

+0

谢谢你你的答案,它的作品的总和,但我有同样的问题与乘法....我增加“muestras”为100,但答案是0和时间0太... –

+0

尝试增加muestras到100000 –