abs and minimum values
Ola Fosheim Grøstad
ola.fosheim.grostad at gmail.com
Sun Oct 31 07:54:27 UTC 2021
On Sunday, 31 October 2021 at 05:04:33 UTC, Dom DiSc wrote:
> This should be no surprise. You need to know what the resulting
> type of int + uint should be. And it is ...... uint! which is
> one of the stupit integer-promotion rules inherited from C.
In C++ it is undefined behaviour to take the absolute value of a
value that has no positive representation. I assume the same is
true for C? So you can write a compiler that detects it and fails.
You cannot do this in D as int is defined to represent an
infinite set of numbers (mapped as a circle). So in D, you could
say that the abs of the most negative value is a positive value
that is represented as a negative due to circular wrapping.
If this happens in C then it is a bug. If it happens in D, then
it is a defined feature of the language.
More information about the Digitalmars-d-learn