'int' is enough for 'length' to migrate code from x86 to x64

Matthias Bentrup via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 24 09:12:30 PST 2014


On Monday, 24 November 2014 at 16:45:35 UTC, Ola Fosheim Grøstad
wrote:
> On Monday, 24 November 2014 at 16:00:53 UTC, ketmar via 
> Digitalmars-d wrote:
>> this *is* overflow. D just has overflow result defined.
>
> So it basically is and isn't modular arithmetic at the same 
> time?

Overflow is part of modular arithmetic. However, there is no
signed and unsigned modular arithmetic, or, more precisely, they
are the same.

Computer words just aren't a good representation of integers.

You can either use modular arithmetic, which follows the common
arithmetic laws for addition and multiplication (commutativity,
associativity, etc., even most non-zero numbers have a
multiplicative inverse), but break the common ordering laws (a >=
0 && b >= 0 implies a+b >= 0).

Or you can use some other order preserving arithmetic (e.g.
saturating to min/max values), but that breaks the arithmetic
laws.

> I think Ada got this right by providing the ability to specify 
> the modulo value, so you can define:
>
> type Weekday is mod 7;
> type Byte is mod 256;
>
> A solid solution solution is to provide «As if Infinitely 
> Ranged Integer Model» where the compiler figures out how large 
> integers are needed for computation and then does overflow 
> detection when you truncate for storage:
>
> http://resources.sei.cmu.edu/library/asset-view.cfm?assetid=9019

You could just as well use a library like GMP.


More information about the Digitalmars-d mailing list