대답은 간단하지만 확실하지 않습니다.C가 길면 뺄셈이 정확하지 않습니까?
struct timespec start, finish, diff;
int ndiff;
/* Structs are filled somewhere else */
diff.tv_sec = finish.tv_sec - start.tv_sec;
ndiff = finish.tv_nsec - start.tv_nsec;
if (ndiff < 0) {
diff.tv_sec--;
ndiff = 1L - ndiff;
}
diff.tv_nsec = ndiff;
printf("Elapsed time: %ld.%ld seconds.\n", diff.tv_sec, diff.tv_nsec);
그러나 출력 내가 그 이후 (나노초의 마지막 세 자리를 잃고 있음을 나타내는 것으로 보인다 Elapsed time: 0.300876000 seconds.
같은 것이 항상 :이 코드를 사용하여 두 struct timespec
사이에 델타를 계산하기 위해 노력하고있어 항상 0이 아니어야 함). 누군가 그 원인을 지적 할 수 있습니까?
timespec이 나노 초 정확한 것으로 보장 할 수는 없습니다. – rici
'ndiff = 1L - ndiff;'는 나에게 잘못 보입니다. –
... 아니면'struct timespec '을 채울 수있는 시스템 인터페이스가 나노초 해상도를 보장하지 않는다고 말하는 것이 더 정확할 수도 있습니다. –