On Friday, 29 October 2021 at 18:19:58 UTC, Salih Dincer wrote:
On Thursday, 28 October 2021 at 21:23:15 UTC, kyle wrote:
```
void main()
{
import std.math : abs, sgn;
alias n_type = short; //or int, long, byte, whatever
assert(n_type.min == abs(n_type.min));
assert(sgn(abs(n_type.min)) == -1);
}
```
I stumbled into this fun today. I understand why abs yields a
negative value here with overflow and no promotion. I just
want to know if it should. Should abs ever return a negative
number? Thanks.
this should work on all types:
```d
auto sign(T)(T n) {
return abs(n) / n;
}
```
Surprisingly, no.
sign(short.min) == 1