'int' is enough for 'length' to migrate code from x86 to x64
via Digitalmars-d
digitalmars-d at puremagic.com
Tue Nov 25 00:52:06 PST 2014
On Tuesday, 25 November 2014 at 07:39:44 UTC, Don wrote:
> No, that is not overflow. That is a carry. Overflow is when the
> sign bit changes.
I think this discussion will be less confusing with clearing up
the terminology.
An overflow condition happens when the representation cannot hold
the magnitude of the intended type. In floating point that is
+Inf and -Inf.
And underflow condition happens when the representation cannot
represent the precision of small numbers. In floating point that
is +0, -0 and denormal numbers, detected or undetected.
Carry is an extra bit that can be considered part of the
computation for a concrete machine code instruction that provides
carry. Eg 32bits + 32bits => (32+1) bits.
If the intended type is true Reals and the representation is
integer then we get:
0u - 1u => overflow
1u / 2u => underflow
Carry can be taken as an overflow condition, but it is not proper
overflow if you interpret it as s part of the result that depends
on the machine language instruction and use of it. For a regular
ADD/SUB instruction with carry the ALU covers two intended types
(signed/unsigned) and use the control register flags in a way
which let's the programmer make the interpretation.
Some SIMD instructions does not provide control register flags
and are therefore true modular arithmetic that does not overflow
by definition, but if you use them for representing a non-modular
intended type then you get undetected overflow…
Overflow is in relation to an interpretation: the intended type
versus the internal representation and the concrete machine
language instruction.
More information about the Digitalmars-d
mailing list