2016-09-01 3 views
0

그래서 gettimeofday를 사용하여 코드 실행 경과 시간을 찾으려고합니다. 그러나 표준 출력으로 출력 할 때이 매우 큰 수를 얻습니다. 실행은 1 초도 채 걸리지 않지만 출력은 훨씬 더 오랜 시간이 걸립니다.gettimeofday를 사용하여 경과 시간을 밀리 초 단위로 찾으려고 시도합니다.

struct timeval start, end; 

gettimeofday(&start, NULL); 

//code 

gettimeofday(&end, NULL); 
printf("Elapsed Time = %ld\n", (end.tv_sec - start.tv_sec) + ((end.tv_usec - start.tv_usec)/1000000.0); 

코드 초 미만에서 실행하지만 내 출력은 -> 140734185085712

+0

'end.tv_usec'에서'start.tv_usec'을 뺄 수 없으며, 43 - 19를 계산할 때 3에서 9를 뺄 수 있습니다. –

+0

@SteveSummit : 가능합니다. 43 - 19은'(4-1) * 10 + (3-9)'입니다. 3-9에서 얻은 -6은 첫 번째 첫 번째 비트에서 오른쪽 대답으로 30을 줄이기 위해 필요한 것입니다. –

+1

그래, 나는 너무 빨리 논평 한 것 같아. 나는 진짜 문제를 놓쳤다. 나의 방어 책에서'struct timeval'의'tv_usec' 필드에 부호가 없다면 언더 플로우에 문제가있을 수 있다고 말할 것입니다. (하지만 일반적으로 서명 되었으니 까.) –

답변

1

PRINTF %의 신분증 대신 부동의 정수를 기대와 함께. % ld 대신 % f 또는 유사 시도하십시오. 또한 마이크로 초 부분에서 랩 어라운드 (wraparound)를 확인하고 처리 할 수도 있습니다.

+0

이번 여름 방학은 정말로 와서 엉덩이에 나를 물었고 분명히 내 뇌의 덩어리였습니다. 고마워요 – Javant

+0

ㅎ, 걱정마. 우리 모두에게 일어납니다. 이런 종류의 실수를하면할수록 그들을 제적시킬 수 있습니다. –

관련 문제