digitalmars.D - std.math.abs(int.min) == int.min?
- Jens Mueller (16/16) Jan 02 2012 Hi,...
Hi, in 2's complement the value T.min is special because its inverse is itself. I'm using std.math.abs which computes the inverse using the unary operator -. That's why it holds assert(std.math.abs(int.min) == int.min) Which is on one hand a bit strange because I'd expect the absolute of a negative number to be positive. But on the other hand I see no way to properly fix this. As the mathematical absolute of T.min is not in the value range of T. What is the post condition of std.math.abs? Must abs(x) >= 0 hold? One could remove T.min from its definition range using a pre condition. This is how it's done in C. But in D it should be done using contracts which unfortunately will be compiled out in phobos (release mode is default). In any case, IMHO the documentation needs clarification for this special case. Jens
Jan 02 2012