最大最小算出コードで分岐を減らしたい

概要

二つの数の最大値または最小値を求めるコードにおける分岐を減らすコードの紹介です.
Facebookシェア Twitterツイート LINEで送る このエントリーをはてなブックマークに追加
この章を学ぶ前に必要な知識
0
条件
  • 二つの数値が必要
  • 内部で条件分岐のないabs関数
効果
  • 二つの数値のうち大きい方または小さい方の値を得る

解 説

条件分岐を減らせることはコードの最適化をする際に有用である場合があります. ここでは、それを実現するための方法についてまとめます. 有名な絶対値関数abs()を用いたときの方法をまず紹介します.
最大最小算出コードで分岐を減らしたい
C++
1
2
3
4
5
6
7
int max(int a, int b){
    return (a + b + abs(a-b))/2;
}
 
int min(int a, int b){
    return (a + b - abs(a-b))/2;
}
abs関数により最大値と最小値の算出方法
わかりやすく除算をするために "/2"としていますが、 シフト演算子で右シフト1(">>1")を行う形で構いません.
割る2に関して
また、別の条件分岐を減らすことができる方法が乗っているブログがあったため、以下に手法を引用する.他の方法についてはリンク先にて確認ください.
C++
1
2
3
4
5
6
7
int max(int a, int b){
    return (a > b) * a + (a < b) * b;
}
 
int min(int a, int b){
    return (a > b) * b + (a < b) * a;
}
abs関数も必要としないmax関数及びmin関数
この章を学んで新たに学べる
Comments

Reasons
>>隠す