2010-06-19 6 views
0

시간 계산이 끝난 후 (시간이 걸리는) 내 코드에서 함수 실행을 계산하려고하는데 clock()을 사용하지만 몇 가지 오류가 발생합니다. 는 음수입니다. 나는 다음과 같이하고있다 :C++ 계산 실행 시간 오류

long double time; 
clock_t start, t_end; 

t_start = clock(); 
algorithm->execute(); 
t_end = clock(); 

time = ((long double) t_end - t_start)/CLOCKS_PER_SEC; 

cout << time << endl; 

나는 무엇인가하고있다?

+0

: 'clock_t t_start'여야합니다. 't_'가 없습니다. –

+1

21 질문, 0 답변, 0 투표? – KevenK

답변

1

clock()로 전화하지 않아도 -1이 반환되지 않았는지 확인 했습니까? 이러한 정보를 사용할 경우 1 -

클럭() 함수는 프로그램 시작부터 프로세서 시간을 반환하거나.

이 일의 또 다른 방법은 다음과 같습니다

#include <time.h> 

time_t start, end; 
time(&start); 
algorithm->execute(); 
time(&end); 
double diff = difftime(end, start); 
+0

나는 접근이 밀리 초를 보여주지 않는다고 생각한다. 나는 그들을 필요로한다. – dmessf

+3

아, 1 시간이 걸릴 때 밀리 초가 필요할 것이라고 기대하지 않았다. –

0

나는 100 % 확실하지 않다,하지만 당신은 긴 이중에만 t_end 캐스트 할 ???

그것은해야하지 :

((long double)t_end - (long double)t_start)/CLOCKS_PER_SEC 

또는

((long double)(t_end - t_start))/CLOCKS_PER_SEC 

???

2

CLOCKS_PER_SEC은 1000000이고 clock()은 부호가있는 32 비트 값을 반환하므로 약 36 분 후에 음수가되고 약 72 분 후에 감싸기됩니다.

긴 실행 시간을 측정하는 방법에 대한 자세한 내용은 http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime을 참조하십시오.

+0

그럼 .. 72 분 후에 "재설정"되니? – dmessf

+0

'CLOCKS_PER_SEC '은 반드시 1000000 일 필요는 없으며, 초 단위의 시계 틱 수입니다. 그것은 어떤 숫자라도 될 수 있습니다. 덧붙여서,'clock()'은 tick_t count를 표현할 수있는 타입 인'clock_t'를 반환합니다. 서명 된 것이 든 서명되지 않은 것이 든, 또는 비트 수는 아닙니다. – GManNickG

+0

@GMan - 당신은 다소 정확합니다. Posix는 CLOCKS_PER_SEC을 1000000으로 요구하므로 Linux (및 대부분의 유닉스 변형)의 경우는 그렇지만 비 호환 시스템의 경우는 그렇지 않을 수 있습니다. Win32의 VC++는 1000이라는 값을 사용합니다. – Dipstick