【C++】数値の符号を調べる方法

一般的に、符号を返す関数とは、正の値なら1を、負の値なら-1を、0なら0を返すと言う動作をします。

簡単に考えるなら、if文で書くだろうけど、それだと、何度も呼び出す場合は、条件分岐の動作が処理時間に大きな影響を与えてしまいます。また、条件分岐は最適化されづらいため、最適化による高速化の恩恵を殆ど受けないです。

それなら、絶対値で割れば良いとか言い出す人がいそうですが、その方法では、0除算の可能性があるし、除算のコストも意外と馬鹿に出来ない。

そこで、C++では真偽値が1と0に対応する事を利用して、簡単な計算式によって狙った値を返させれば、0除算も発生せず、条件分岐も使わない。

template<typename _Tp> inline int sign(_Tp val){
return 1 - (val <= 0) - (val < 0);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください