2017-04-14 37 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 –