絶対値関数
分岐不要の絶対値関数です。
条件分岐しないという事は、どれくらいマシンの負担を減らすここが出来るのだろうか......
アセンブラコードに置き換えると、2ステップぐらい減らす事が出来そうですね。
#include <stdio.h> int myabs(int x); int mynabs(int x); int main(int argc,char *argv[]) { printf("%d\n",myabs(100)); printf("%d\n",myabs(-100)); printf("%d\n",mynabs(100)); printf("%d\n",mynabs(-100)); return 0; } /* 絶対値関数 */ int myabs(int x) { return ((x>>30)|1)*x; } /* 絶対値関数マイナス */ int mynabs(int x) { return -((x>>30)|1)*x; } |