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