ホーム 道しるべ 憩いの広場 濃緑空間 濃緑研の日記

エントリルーチン
ホーム ] 上へ ]

 

#define DESCRIPTION05 "x86 Fixed"
#define REQFEATURES05 RF_FPU         //  とりあえず

void entry05(float coeff[SZOUTVECTOR][SZINVECTOR], float in_vector[SZINVECTOR], float out_vector[SZOUTVECTOR], int count )
{
    long         lcoeff[SZOUTVECTOR][SZINVECTOR];
    long        lin_vector[SZINVECTOR];
    long         lout_vector[SZOUTVECTOR];
    long             i,j,l,m;
//    char    buf[80];

//    in_vectorを固定小数点 lin_vector に変換(小数点位置は2に設定:1.0を越えてそうになかったので)

    for (i=0; i<SZINVECTOR; i++)
    {
        f2lf(in_vector[i],&lin_vector[i],&l);
        lfadj(&lin_vector[i],l,2);
    }

//    coeffを固定小数点 lcoeff に変換(小数点位置は6に設定:整数部は2桁程度と判断)

    for(i=0; i<SZOUTVECTOR; i++)
    {
        for (j=0; j<SZINVECTOR; j++)
        {
            f2lf(coeff[i][j],&lcoeff[i][j],&l);
            lfadj(&lcoeff[i][j],l,6);
        }
    }

//    実際の演算部(結果は小数点位置8として得られる)

    r2fixed(lcoeff, lin_vector, lout_vector, count);

    for(i=0; i<SZOUTVECTOR; i++)
    {
        m = 8;
        norm(&lout_vector[i],&m);
        lf2f(lout_vector[i],m,&out_vector[i]);
    }
}