私は答えが簡単だと確信していますが、私はそれを得ていません。Cでlongを減算すると精度が失われますか?
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);
ただし、出力は私がこれらのことから(ナノ秒の最後の3桁を失っていたことを示すように思わElapsed time: 0.300876000 seconds.
のようなものが常にある:私はこのコードを使用して2つのstruct timespec
間の差分を計算しようとしています常にゼロであるべきではない)。誰かがそれを引き起こしていることを指摘できますか?
timespecが正確にナノ秒になるという保証はありません。 – rici
'ndiff = 1L - ndiff;'は間違っています。 –
...または 'struct timespec'を実装するかもしれないシステムインタフェースが、ナノ秒の解像度を保証するものではないと言う方がより正確でしょう。 –