'int' is enough for 'length' to migrate code from x86 to x64
Daniel Murphy via Digitalmars-d
digitalmars-d at puremagic.com
Fri Nov 21 00:00:11 PST 2014
"H. S. Teoh via Digitalmars-d" wrote in message
news:mailman.2156.1416499421.9932.digitalmars-d at puremagic.com...
> By that logic, using an int to represent an integer is also using the
> incorrect type, because a signed type is *also* subject to module 2^^n
> arithmetic -- just a different form of it where the most negative value
> wraps around to the most positive values. Fixed-width integers in
> computing are NOT the same thing as unrestricted integers in
> mathematics. No matter how you try to rationalize it, as long as you use
> hardware fix-width "integers", you're dealing with modulo arithmetic in
> one form or another. Pretending you're not, is the real source of said
> subtle bugs.
While what you've said is true, the typical range of values stored in an
integral type is much more likely to cause unsigned wrapping than signed
overflow. So to get the desired 'integer-like' behaviour from D's integral
types, you need to care about magnitude for signed types, or both magnitude
and ordering for unsigned types.
eg 'a < b' becoming 'a - b < 0' is valid for integers, and small ints, but
not valid for small uints unless a > b. You will always have to care about
the imperfect representation of mathematical integers, but with unsigned
types you have an extra rule that is much more likely to affect typical
code.
More information about the Digitalmars-d
mailing list