Concerning Time.TimeDiff

Alastair Reid alastair@reid-consulting-uk.ltd.uk
Thu, 19 Jun 2003 16:51:08 +0100


On Thursday 19 June 2003 2:59 pm, Ketil Z. Malde wrote:
> What about CPUs with only native 32bit support,

All you need to implement arbitrary sized N-bit arithmetic is a CPU which 
provides 'add with carry', 'subtract with carry', etc.  All CPUs I have every 
used provide these operations and I think it's a safe bet that all future 
CPUs will provide them.

> What about computers with a >64 bit native type?

Processors which provide 2*N*8-bit arithmetic sometimes provide N*8-bit 
arithmetic too (e.g., 32-bit processors sometimes provide 16 bit arithmetic 
too) so, if their native type is a power of 2 times 64, we should be ok.

For any other processors, we can implement it the way 8 and 16-bit arithmetic 
is currently implemented on Hugs: we coerce the operands to 32 bits, perform 
the 32-bit operation and coerce the operands back to the desired result size.  
Coercing up takes, at most, a register-register move and coercing down takes 
an and operation.

> ...and I don't think it's entirely given that two 64 bit numbers will
> be faster than one Integer.

I do.  the implementation of Integer requires traversing additional 
indirections to an array of bits, reading the size of the operands, 
allocating space for the result, etc.  It's a lot of work even if the 
arguments and result are simple values like 0 or 1.

I suspect Integer could be optimized (by recognizing that most uses of Integer 
are for values that fit in 31 bits) so that the difference is pretty minimal.  
but this would have limited effect on a date like 19 June 2003 which is (very 
roughly) 2^69 picoseconds since the epoch.

Which is all to say that whatever sound reasons may exist, future portability 
concerns or performance are not reasons to prefer using a single Integer or a 
Rational.

--
Alastair Reid