Ich bin sicher, die Antwort ist einfach, aber ich verstehe es nicht ganz. Ich versuche, das Delta zwischen zwei struct timespec
mit diesem Code zu berechnen:Subtraktion von Long in C verliert an Präzision?
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);
jedoch der Ausgang ist immer so etwas wie Elapsed time: 0.300876000 seconds.
das scheint darauf hinzudeuten, dass ich die letzten drei Ziffern der ns bin zu verlieren (da diese sollte nicht immer Null sein). Kann jemand darauf hinweisen, was das verursacht?
Es gibt keine Garantie, dass eine Zeitangabe nanosekundengenau ist. – rici
'ndiff = 1L - ndiff;' sieht für mich falsch aus. –
... oder vielleicht wäre es genauer zu sagen, dass die Systemschnittstellen, mit denen Sie * eine "struct timespec" * füllen können, nicht garantiert eine Auflösung im Nanosekundenbereich bieten. –