eggert at CS.UCLA.EDU
Mon Nov 1 17:47:13 UTC 2004
"Olson, Arthur David (NIH/NCI)" <olsona at dc37a.nci.nih.gov> writes:
> ** If (sizeof (double) > sizeof (time_t)) simply convert and subtract
> ** (assuming that the wider type has more precision).
This should say "larger" rather than "wider". In C99 standardese,
"larger" talks about sizeof, "wider" talks about useful bits
> if (time1 >= 0 && time0 >= 0 || time1 < 0 && time0 < 0)
It'd be nicer, shorter, and often faster to say this:
if ((time1 < 0) == (time0 < 0))
and then, for symmetry (and more likelihood for compiler optimization) replace
"time1 >= 0 /* && time0 < 0 */" with
"time0 < 0 /* && time1 >= 0 */" later on.
> ** Punt if unsigned long is too narrow.
Why not use uintmax_t if 199901 <= __STDC_VERSION__? That will work
on all hosts except the weird ones where unsigned values have holes.
The implementation is still a bit slow for the common case where
time_t is a signed integer type and fits in double (e.g., x86) or long
double (e.g., x86-64). This case should be doable without any tests
or branches. It's not a correctness issue; just a performance issue.
I sense that you didn't like the version that I sent in, because of
its complexity. What part of the complexity turned you off the most?
Perhaps I could simplify that part.
More information about the tz