Time Resolution
Ashley Yakeley
ashley at semantic.org
Mon Jan 31 00:50:11 EST 2005
What underlying numerical type should be used to store TAI and UTC
types, and at what resolution?
newtype Clocktime = Clocktime ??? deriving (Eq,Ord, ...)
Here are some suggestions. Not all of them are good ones:
* Integer, where 1 = 1 microsecond, nanosecond, picosecond
But which? Current ClockTime is ps.
POSIX "struct timeval" is micro-s, "struct timespec" is ns.
TAI64NA uses attoseconds (10^-18 s).
<http://cr.yp.to/libtai/tai64.html>
+ fast(?)
+ power of ten matches common practice
- whatever resolution might not be enough
* Integer, where 1 = 1 Planck time (c. 5*10^-44 s)
+ amusing
+ unlikely to ever need more accuracy
- number of Planck times in an SI second not precisely known
- not a power of ten
- about 2*10^31 in a picosecond, or about 100 bits
* Fixed-size integer type, where 1 = 1 microsecond or etc.
2^64 mus = 580,000 years
2^64 ns = 580 years
2^128 ps = 10^19 years
+ fast(?)
- probably need Int128
* Rational, where 1 = 1 second
+ 1 = 1 second easy to use
+ all the resolution you need
+ no error when dividing, guarantee (a / b) * b == a
- might be slower?
* Fixed-point type, where 1 = 1 second
This could be Integer at some power of ten.
+ 1 = 1 second easy to use
- we'd have to create it
- whatever resolution might not be enough
* Floating-point type, where 1 = 1 second
+ 1 = 1 second easy to use
+ fair amount of resolution
+ can use sqrt and trig functions easily
+ fancy NaN values, signed zeros and infinities
- resolution variable, bad use of floating point
* Type parameter, where 1 = 1 second
+ flexible
- extra complication
- can't use directly with Integer except for 1-second resolution
--
Ashley Yakeley, Seattle WA
More information about the Libraries
mailing list