1#include "timespec.h"
 2
 3void timespec_add(struct timespec* ts, double increment)
 4{
 5    double integral;
 6    double frac = modf(increment, &integral);
 7    frac *= 1'000'000'000;
 8    ts->tv_sec += integral;
 9    ts->tv_nsec += frac;
10    if (ts->tv_nsec >= 1'000'000'000) {
11        ts->tv_nsec -= 1'000'000'000;
12        ts->tv_sec++;
13    }
14}
15
16void timespec_sub(struct timespec* a, struct timespec* b)
17{
18    a->tv_sec -= b->tv_sec;
19    if (a->tv_nsec < b->tv_nsec) {
20        a->tv_sec--;
21        a->tv_nsec += 1000'000'000UL;
22    }
23    a->tv_nsec -= b->tv_nsec;
24}