Email list hosting service & mailing list manager


Re: Arithmetic issues Alan Watson 28 Oct 2005 22:00 UTC

Thanks very much for the reference! It looks very useful.

>> In an implementation written in C (i.e., without access to the  carry
>> flag) running on a 32-bit processor, it might make sense to  use
>> 16-bit fixnums to make it easy to check for overflow and the  need for
>> bignums.
>
> This is not really necessary.  See "Hacker's Delight" by Henry S.
> Warren, who gives algorithms for checking for overflow in the basic
> arithmetic operations for signed and unsigned arithmetic.

I didn't say it was necessary, I said it made it easy. In this case,
easy means quick.

Let's consider the case of multiplication. If a double-width result is
available, Warren suggests a check for overflow using only shifts and a
single compare (which can well predicted). If it is not, he suggests a
check using integer division (which may be slow) and more comparisons
(which are more difficult to predict).

>> Of course, in a sense, you have access to the carry flag because
>> "long long" is at least 64-bits.
>
>
> I'm no C expert, but somehow I doubt that this is true.  (I first  wrote
> "strictly true", but I guess it's either true or false.)

What I meant was that if you put two unsigned 32-bit longs in unsigned
64-bit long longs and add them, the 33rd bit of the result will be equal
to the carry flag.

Regards,

Alan
--
Dr Alan Watson
Centro de Radioastronomía y Astrofísica
Universidad Astronómico Nacional de México