● 実行速度について - 乗除算を避ける・変更する
乗除算を避ける・変更する
一般的に乗除算は加減算よりも時間が掛かるものですが、これは fixed X でも同じです。通常、C/C++標準の型しか使わない計算では、ある程度はコンパイラが最適なコードを生成してくれますが、fixed X を使った計算の場合は、プログラマ自身が調整しなければなりません。
例1.
fixed_div(a,b,rem,SIZE);
関数fixed_div は fixed X の中でも時間の掛かる計算の一つです。
もし、引数が 0 ≦ a < 2b にしかならないのであれば、次のような処理に変更する事ができます。
例2.
memcpy(rem,a,SIZE);
if (fixed_sub(rem,b,SIZE)){
商は 0 、剰余は a
}else{
商は 1 、剰余は rem
}
使用条件が限定されますが、通常の除算を使用するよりも遥かに効率的です。
更に、剰余が不要の場合は、次のようにする事もできます。
例3.
if (fixed_cmp(a,b,SIZE) < 0)
商は 0
else
商は 1
比較は、差を返さない減算と同じですが、fixed X では効率性の点で大きな違いがあります。fixed_sub は無条件に指定領域全てをアクセスしますが、fixed_cmp は比較の継続条件が偽になり次第、処理を終了します(「数値幅を小さくする」参照の事)。