abs and minimum values

kyle kbcomm at protonmail.com
Fri Oct 29 22:15:16 UTC 2021


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




More information about the Digitalmars-d-learn mailing list