● 実行速度について

部分計算での数値幅の縮小

FIXEDVAL変数が全て同じ数値幅で統一されている時に、数値幅を縮小させた場合、一番大きな値を扱う計算処理がオーバーフローを起こす事があります。しかし、同じプログラム内にある他の計算処理では、その変数を使用してもオーバーフローしないかもしれません。



全部の数値幅を統一するのではなく、計算AにはA専用の変数、計算BにはB専用の変数、というように、各計算毎の括りで必要な分だけの数値幅を定めれば、平均的な速度を速くする事ができるかもしれません。
数値幅を統一しないで個別に変数を持たせると、各計算に結果を渡す際、変換処理が必要になりますが、そのオーバーヘッドが無視できるか否かは、計算処理の規模によります(実験で確かめる必要がある)。

例.

    FIXEDVAL        i[SIZE],maxcnt[SIZE],temp[SIZE * 2];

    fixedutil_setulval32(maxcnt,SIZE,MAX_CNT);

    /* for(i = 0;i < MAX_CNT;i++) */
    for(memset(i,0,SIZE);fixed_cmp(i,maxcnt,SZIE) < 0;fixed_add32(i,1UL,SIZE)){

        /* i *= 570 */
        fixed_mul32(i,570UL,temp,SIZE);
        memcpy(i,temp,SIZE);

                        ・
                        ・
                        ・
計算にカウンタを使用する場合、FIXEDVAL型の変数で統一すると、計算時の変換処理が不要になります。しかし、カウンタに対する演算量が多く、且つカウンタの変化が int型でも問題無い範囲であれば、int型に変更した方が効率的な場合があります(標準の変数型で出来る範囲の事は fixed X で行わないようにする)。
    FIXEDVAL        val[SIZE];
    int             i;

    for(i = 0;i < MAX_CNT * 570;i += 570){

        fixedutil_setulval32(val,i,SIZE); /* カウンタを FIXEDVAL型に変換 */

                        ・
                        ・
                        ・