128 bit signed and unsigned integer types
Daniel Keep
daniel.keep.lists at gmail.com
Sun Dec 28 05:28:58 PST 2008
bearophile wrote:
> ...
>
> A possible use is for runtime test for overflows: you can perform operations among 64 bit integers with 128 bit precision, and then you can look at the result if it fits still in 64 bits. If not, you can raise an overflow exception (probably there other ways to test for overflow, but this seems simple to implement). You can use 64 bits to implement the safe operations among 32-16-8 bit numbers on the 64 bit CPUs).
>
> Bye,
> bearophile
It's always annoyed me that the CPU goes to all the trouble of doing
multiplies in 64-bit, keeping track of overflows, etc., and yet there's
no way in any language I've ever seen (aside from assembler) to get that
information.
Personally, rather than working around the problem with 128-bit types,
I'd prefer to see something (roughly) like this implemented:
bool overflow;
ubyte high;
ubyte a = 128;
// overflow == false
pragma(OverflowFlag, overflow) ubyte c = a + a;
// overflow == true
// high == 0
pragma(ResultHigh, high) ubyte d = a * 2;
// high == 1, d == 0
As for 128-bit types themselves, I'm sure *someone* would find a use for
them, and they'd be their favourite feature. Personally, I prefer
arbitrary-precision once you start getting that big, but there you go.
-- Daniel
More information about the Digitalmars-d
mailing list