2017-04-14 8 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; 
} 

と完璧に動作しますが、私は、乗算のために、次のコードを書いて、最初と最後の時間は...、私は理解できない理由を私は知らない...

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

I 0でありますオーバーフローしていることを知っていますが、サンプルのサイズがどのようなサイズであっても同じ結果になります....助けてください...私の悪い英語、Cの偉人には申し訳ありませんオロビア! :)

答えて

1

戻り値clockclock_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

あなたの答えをありがとう、それは合計のために動作しますが、私は乗算と同じ問題があります....私は100に "muestras"を増加させるが、答えは0と時間も0 ... –

0

clock()からの戻り値は、タイプclock_tではなく、floatであり、プログラムの開始以降のティック数を表します。 Anttiの答えのように、それらを減算してからdoubleに変換してCLICKS_PER_SECで除算する必要があります。

また、乗算プログラムは10 muestrasしか実行しません。つまり、最初のクロックティックで完全に終了することがあります。それを大きくすると、異なる経過時間が表示されることがあります。

+0

ありがとうあなたの答えは、それは総和のために働くが、私は乗算と同じ問題を抱えている....私は100に "muestras"を増加させるが、答えは0と時間も0です... –

+0

100000にmuestrasを試してみてください –

関連する問題