2009-11-11 8 views
0

나는 timeval을 정수로 나눕니다. 여기에 지금까지있어 무엇 :C에서 정수로 시간 값 나누기

#include <limits.h> 
#include <stdio.h> 
#include <stdlib.h> 

int 
main(void) 
{ 
    struct timeval my_time; 
    struct timeval my_time_quotient; 
    int i; 

    gettimeofday(&my_time, NULL); 
    i = 5; 

    my_time_quotient = my_time/i; 

    printf("%d secs, %d msecs\n", (int)my_time_quotient.tv_sec, (int)my_time_quotient.tv_usec); 

    return 0; 
} 

내가받을 컴파일 :

[email protected]:~/$ gcc -g -otimespike timespike.c 
timespike.c: In function ‘main’: 
timespike.c:15: error: invalid operands to binary/(have ‘struct timeval’ and ‘int’) 

몫을 찾을 수있는 올바른 방법은 무엇입니까?

+0

숙제 문제 인 경우 "숙제"태그를 추가하여 즉시 답변을 제공하지 않겠습니다. –

+0

스택 오버플로에 오신 것을 환영합니다. 이와 같은 메시지에 회신하려면 질문 아래의 각 답변 아래에있는 "덧글 추가"링크를 클릭하십시오. –

답변

3

struct이 숫자를 나타내는 경우에도 struct을 숫자 형식으로 직접 나눌 수 없습니다.

먼저 구조체를 마이크로 초를 나타내는 정수 유형으로 변환해야합니다. 요소의 유형은 int이므로 int의 거의 두 배가되는 숫자 유형을 찾아야합니다. 다행히도 컴파일러는 long long int 또는 __int64을 지원하며 둘 다 64 비트입니다.

구조체의 내용을 숫자 형식으로 변환 한 후 나누기는 모든 나누기와 마찬가지로 진행됩니다.

나누기를 수행 한 후 결과를 "division after remainder"연산자 인 x % y을 사용하여 timeval에 다시 저장해야합니다.

1

숙제 문제 일 수 있으므로 코드를 제공하지는 않겠지 만 작동하지 않는 이유와 작동 방식에 대한 설명을 제공해 드리겠습니다.

일반적인 오래된 데이터 유형 (정수, 복식)으로 작업 할 때 나눌 수 있습니다. 그러나 timeval은 평범한 오래된 데이터 유형이 아닙니다. 구조체에 두 개의 조합이 있습니다. timeval 구조체는 정수로 나눌 수있는 방법을 모릅니다 (즉, invalid operands to binary/(have ‘struct timeval’ and ‘int’)이라고 할 때 그 의미입니다).

이렇게하려면 수동으로해야합니다. 초 수 (tv_sec)를 나눈 다음 나노초 수 (tv_usec)를 나눠서이 부분의 결과를 다시 my_time_quotient 시간으로 삽입하십시오. 독자의 연습으로 몇 초의 처리가 남아 있지만, 히스 (Heath)가 제안한 접근법이 한 가지 방법입니다.

+0

이것은 명시된대로 작동하지 않을 것입니다. 초를 나눈 결과는 분수 결과 (즉, 복잡한 수학 중 부동 소수점 또는 고정 소수점 분수)를 유지하고 초의 분수를 마이크로 초 카운터에 축적해야하며, 마이크로 초의 오버플로를 감지하고 초 카운터로 증가분을 전송합니다. –

+0

"초 단위의 처리는 독자의 연습으로 남겨 두지 만 히스가 제안한 접근법은 한 가지 방법입니다." 나는 당신이 초의 수를 얻기 위해 제수로 long int를 나누겠다고 주장하지는 않습니다. 나는 당신이 올바른 방법으로 접근하는 방법에 상관없이 본부를 직접 처리해야한다고 주장합니다. – Smashery

+0

죄송합니다. 독자 분께 남긴 메모를 놓치 셨습니다. ;) –