最大値を高速に計算するためのAGGREGATE Magicのトリックを見つけました。これが整数用であるという唯一の問題ですが、いくつか試してみましたが、符号なし整数用のバージョンを作成する方法がわかりません。
inline int32_t max(int32_t a, int32_t b)
{
return a - ((a-b) & (a-b)>>31);
}
何かアドバイス?
編集
他の人が述べたように、未定義の動作が発生するため、これを使用しないでください。最新のアーキテクチャでは、コンパイラは からブランチレス条件付き移動命令を発行できreturn (a > b) ? a : b
ます。これは、問題の関数よりも高速です。