サイトアイコン CV & Technologies

数値の符号を返す関数のエレガントな書き方

数値Aの符号を返す関数が必要になった時、どのような方法があるでしょうか。ぱっと思いつく範囲では、「if 文で条件分岐」か「AをAの絶対値で除算する」くらいだと思います。

C++で書くならば

double sign(double A){
    if(A>0) return 1;
    else if(A<0) return -1;
    else return 0;
}

double sign(double A){
    if(A==0) return 0;
    else return A/abs(A);
}

というふうになると思います。

それでは、エレガントな書き方!

double sign(double A){
    return (A>0)-(A<0);
}

A>0とA<0の部分で真偽値がそれぞれ返されるので、Aが正なら1-0=1、負なら0-1=-1、0なら0-0=0、というように正しく判定できます。コードの可読性は下がるには下がるかもしれませんが、シンプルでかっこいいと思います。

モバイルバージョンを終了