questions on clock(),time() and difftime() in time

2019-09-11 10:45发布

int fib(int n,int a,int b){
    if (n==2){
        return a+b;
    }
    return fib(n-1,b,a+b);

}

int main() {
    time_t begin,end;
    begin = clock();
    fib(10000,0,1);
    end = clock();
    printf("%f",difftime(end,begin));
}




int main() {
    time_t begin,end;
    time(&begin);
    fib(10000,0,1);
    time(&end);
    printf("%f",(double)(end-begin)/CLOCKS_PER_SEC);
}

1)First question Why does my first main give prints me a time 288.000000,I'm assuming this is 288 milliseconds but in the documentation it is supposed to give me the result in seconds.I am on Mac by the way.

2)Second Question Why does the second main. Why does this print me the output time being 0.000000. I understand that time() give me a time_t structure that i put inside begin and end time_t structs and then i find the difference in seconds,doesn't seem to work.

标签: c time time.h
2条回答
看我几分像从前
2楼-- · 2019-09-11 11:45

Yes i am trying to get the difference in seconds between two difference times.

You could try something like the following approach:

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


void timeCheck(int *clock,int *minutes){
    int hour ;
    int minute ;
    time_t end, start;
    double diff;
    size_t seconds;


    start = (time_t)((clock[0] * 60 + clock[1]) * 60) ;
    end = (time_t)((minutes[0] * 60 + minutes[1]) * 60) ;

    if( end < start ){
        end += 24 * 60 * 60 ;
    }

    diff = difftime(end, start);

    hour = (int) diff / 3600;
    minute = (int) diff % 3600 / 60;
    printf("The difference is %d:%d\n", hour, minute);
    seconds = (size_t)(hour * 3600) + (size_t)(minute * 60);
    printf("Seconds = %zu\n",seconds);
}

int main(void) {
    int hour[] = {22,20};
    int minutes[] = {5,40};

    printf("Start time %d:%d\n",hour[0],hour[1]);
    printf("End time %d:%d\n\n",minutes[0],minutes[1]);

    timeCheck(hour,minutes);
    return 0;
}

Output:

Start time 22:20
End time 5:40
The difference is 7:20
Seconds = 26400
查看更多
▲ chillily
3楼-- · 2019-09-11 11:50

The return type from clock() is clock_t - not necessarily seconds. Apple : clock. Which measures the number of ticks the CPU has used (CLOCKS_PER_SEC). This value is not necessarily milliseconds or seconds.

time() returns the number of whole seconds since a particular point in time (1/1/1970).

So calling time twice in quick succession, results in the same number of whole seconds.

difftime expects time_t (return type from time()) as its parameters and creates an elapsed time (in seconds).

Thus it is not correct to call for clock_t values.

查看更多
登录 后发表回答