--------
In message <558ecbd0.26744.17a64...@dan.tobias.name>, "Daniel R. Tobias" writes
:

>The way dates are defined there is:
>
>     signed 8 octets integer in nanoseconds with 0
>       indicating the precise beginning of the
>       millennium (at 2001-01-01T00:00:00.000000000 UTC)

The bit which confuses me here, as with timespec and timeval is
why the f**k people seem to love mixed radixes for time ?

Numeric timeformats for binary computers should be fixed point
binary and have units of seconds.

That way you can have multiple different formats for different needs
(32.32, 48.16, 64.32, 64.64 ...) and still painlessly convert between
them.

But more importantly: you can do arithmetic on them at machine
speed, instead of having to use horrors such as:

#define timespeccmp(tvp, uvp, cmp)                                              
(((tvp)->tv_sec == (uvp)->tv_sec) ?                                         
((tvp)->tv_nsec cmp (uvp)->tv_nsec) :                                   
((tvp)->tv_sec cmp (uvp)->tv_sec))
#define timespecadd(vvp, uvp)                                                   
do {                                                                            
(vvp)->tv_sec += (uvp)->tv_sec;                                         
(vvp)->tv_nsec += (uvp)->tv_nsec;                                       if 
((vvp)->tv_nsec >= 1000000000) {                                             
(vvp)->tv_sec++;                                                        
(vvp)->tv_nsec -= 1000000000;                                   }               
                                                } while (0)
#define timespecsub(vvp, uvp)                                                   
do {                                                                            
(vvp)->tv_sec -= (uvp)->tv_sec;                                         
(vvp)->tv_nsec -= (uvp)->tv_nsec;                                       if 
((vvp)->tv_nsec < 0) {                                                       
(vvp)->tv_sec--;                                                        
(vvp)->tv_nsec += 1000000000;                                   }               
                                        
And that's why the above is bogus, even before we discuss their choice
of epoch or handling of leapseconds...

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
p...@freebsd.org         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.
_______________________________________________
LEAPSECS mailing list
LEAPSECS@leapsecond.com
https://pairlist6.pair.net/mailman/listinfo/leapsecs

Reply via email to