● 実行速度について - 乗除算を避ける・変更する

乗除算を避ける・変更する

一般的に乗除算は加減算よりも時間が掛かるものですが、これは 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 は比較の継続条件が偽になり次第、処理を終了します(「数値幅を小さくする」参照の事)。