📄 intmatrixinv.cpp
字号:
}
xx[2] = xtmp[1] >> (32 - Q);
xx[1] = (xtmp[1] << Q) | (xtmp[0] >> (32 - Q));
xx[0] = xtmp[0] << Q;
yy[1] = ytmp[1];
yy[0] = ytmp[0];
if ((xx[2] | xx[1] | xx[0]) == 0) /* 被除数为0 */
z[3] = z[2] = z[1] = z[0] = 0;
else if ((yy[1] == 0) && (yy[0] == 0)) /* 除数为0 */
{
z[3] = 0x7fffffff; /* 输出最大值 */
z[2] = 0xffffffff;
z[1] = 0xffffffff;
z[0] = 0xffffffff;
}
else /* 64位相比较 */
{
dividend[0] = dividend[1] = 0;
zz[1] = zz[0] = 0;
do
{
dividend[1] = (dividend[1] << 1) | (dividend[0] >> 31); /* 从被除数的最高64位起,与除数相比较,大则为1,小则为0 */
dividend[0] = (dividend[0] << 1) | (xx[2] >> 31);
xx[2] = (xx[2] << 1) | (xx[1] >> 31);
xx[1] = (xx[1] << 1) | (xx[0] >> 31);
xx[0] = xx[0] << 1;
idx++; /* 记录移动的次数 */
if ((dividend[1] > yy[1]) || ((dividend[1] == yy[1]) && (dividend[0]>=yy[0])))
{
/* 可以除,结果为1 */
zz[0] = 0x00000001;
dividendtmp[0] = dividend[0] & 0x0000ffff;
dividendtmp[1] = dividend[0] >> 16;
dividendtmp[2] = dividend[1] & 0x0000ffff;
dividendtmp[3] = dividend[1] >> 16;
yytmp[0] = yy[0] & 0x0000ffff;
yytmp[1] = yy[0] >> 16;
yytmp[2] = yy[1] & 0x0000ffff;
yytmp[3] = yy[1] >> 16;
ToCompCode(yytmp, yytmp);
Add64_Q(dividendtmp, yytmp, dividendtmp);
dividend[0] = dividendtmp[0] | (dividendtmp[1] << 16);
dividend[1] = dividendtmp[2] | (dividendtmp[3] << 16);
break;
}
}while(1);
do
{
dividend[1] = (dividend[1] << 1) | (dividend[0] >> 31); /* 从被除数的最高64位起,与除数相比较,大则为1,小则为0 */
dividend[0] = (dividend[0] << 1) | (xx[2] >> 31);
xx[2] = (xx[2] << 1) | (xx[1] >> 31);
xx[1] = (xx[1] << 1) | (xx[0] >> 31);
xx[0] = xx[0] << 1;
idx++;
if ((dividend[1] > yy[1]) || ((dividend[1] == yy[1]) && (dividend[0]>=yy[0])))
{
/* 可以除,结果为1 */
zz[1] = (zz[1] << 1) | (zz[0] >> 31);
zz[0] = (zz[0] << 1) | 0x00000001;
dividendtmp[0] = dividend[0] & 0x0000ffff;
dividendtmp[1] = dividend[0] >> 16;
dividendtmp[2] = dividend[1] & 0x0000ffff;
dividendtmp[3] = dividend[1] >> 16;
yytmp[0] = yy[0] & 0x0000ffff;
yytmp[1] = yy[0] >> 16;
yytmp[2] = yy[1] & 0x0000ffff;
yytmp[3] = yy[1] >> 16;
ToCompCode(yytmp, yytmp);
Add64_Q(dividendtmp, yytmp, dividendtmp);
dividend[0] = dividendtmp[0] | (dividendtmp[1] << 16);
dividend[1] = dividendtmp[2] | (dividendtmp[3] << 16);
//Minus64_Q(dividend, yy, dividend); /* dividend存储余数 */
}
else
{
zz[1] = (zz[1] << 1) | (zz[0] >> 31);
zz[0] = zz[0] << 1;
}
} while(idx < 96);
z[0] = zz[0] & 0x0000ffff;
z[1] = zz[0] >> 16;
z[2] = zz[1] & 0x0000ffff;
z[3] = zz[1] >> 16;
}
if (flag != 0)
ToCompCode(z,z);
}
void printINT64(unsigned int *x,FILE *fmatrix)
{
unsigned int flag = 0x00;
double val;
unsigned int bits64[2];
unsigned int xtmp[4];
if((x[3] & 0x00008000) != 0)
{
ToCompCode(x,xtmp);
flag = 0x01;
bits64[0] = (xtmp[1] << 16) | xtmp[0];
bits64[1] = (xtmp[3] << 16) | xtmp[2];
}
else
{
bits64[0] = (x[1] << 16) | x[0];
bits64[1] = (x[3] << 16) | x[2];
}
val = (double)bits64[0] + bits64[1] * pow(2,32);
if(flag != 0) /* 负数 */
fprintf(fmatrix, "-%e\n", val/16777216.);
else
fprintf(fmatrix, "%e\n", val/16777216.);
}
void inversMatrix64(Matrix64 *m64)
{
int *is, *js, i, j, k;
int n = m64->nCols;
unsigned int d[4], p[4];
unsigned int one_64bit[4];
unsigned int tmp[4];
one_64bit[0] = 0x0000;
one_64bit[1] = 0x0100;
one_64bit[2] = 0x0000;
one_64bit[3] = 0x0000;
is = (int*)malloc(n * sizeof(int));
js = (int*)malloc(n * sizeof(int));
for (k = 0; k < n; k++) /*选主元并消元*/
{
memset(d, 0x00, 4*sizeof(int));
for (i = k; i < n; i++)
{
for (j = k; j < n; j++)
{
if((m64->matr[i][j*4+3] & 0x00008000) != 0)
ToCompCode(&m64->matr[i][j*4], p);
else
memcpy(p, &m64->matr[i][j*4], 4*sizeof(int));
// printINT64(p,fmatrix);
if (p[3]>d[3] || (p[3]==d[3]&&p[2]>d[2]) ||
(p[2]==d[2]&&p[1]>d[1]) || (p[1]==d[1]&&p[0]>d[0]))
{
memcpy(d, p, 4*sizeof(int));
is[k] = i;
js[k] = j;
}
}
}
// fprintf(fmatrix, "%d, %d, ", is[k], js[k]);
// printINT64(d,fmatrix);
if ((d[0] | d[1] | d[2] | d[3]) == 0)
{
printf("Error:Can't inverse the matrix!\n");
free(is);
free(js);
exit(0);
}
if (is[k] != k)
{
for (j = 0; j < n; j++)
{
memcpy(p, &m64->matr[k][j*4], 4*sizeof(int));
memcpy(&m64->matr[k][j*4], &m64->matr[is[k]][j*4], 4*sizeof(int));
memcpy(&m64->matr[is[k]][j*4], p, 4*sizeof(int));
// printINT64(&m64->matr[k][j*4],fmatrix);
// printINT64(&m64->matr[is[k]][j*4],fmatrix);
}
}
if (js[k] != k)
{
for (i = 0; i < n; i++)
{
memcpy(p, &m64->matr[i][k*4], 4*sizeof(int));
memcpy(&m64->matr[i][k*4], &m64->matr[i][js[k]*4], 4*sizeof(int));
memcpy(&m64->matr[i][js[k]*4], p, 4*sizeof(int));
// printINT64(&m64->matr[i][k*4],fmatrix);
// printINT64(&m64->matr[i][js[k]*4],fmatrix);
}
}
// printINT64(&m64->matr[k][k*4], fmatrix);
Divide64_Q(one_64bit, &m64->matr[k][k*4], &m64->matr[k][k*4], 24);
// printINT64(&m64->matr[k][k*4], fmatrix);
for (j = 0; j < n; j++)
{
if (j != k)
{
Multiply64_Q(&m64->matr[k][j*4], &m64->matr[k][k*4],&m64->matr[k][j*4],24);
// printINT64(&m64->matr[k][j*4],fmatrix);
}
}
for (i = 0; i < n; i++)
{
if (i != k)
{
for (j = 0; j < n; j++)
{
if (j != k)
{
Multiply64_Q(&m64->matr[i][k*4],&m64->matr[k][j*4],tmp,24);
ToCompCode(tmp, tmp);
Add64_Q(&m64->matr[i][j*4], tmp, &m64->matr[i][j*4]);
//printINT64(&m64->matr[i][j*4],fmatrix);
}
}
}
}
for (i = 0; i <= n-1; i++)
{
if (i != k)
{
Multiply64_Q(&m64->matr[i][k*4], &m64->matr[k][k*4], &m64->matr[i][k*4],24);
ToCompCode(&m64->matr[i][k*4], &m64->matr[i][k*4]);
//printINT64(&m64->matr[i][k*4], fmatrix);
}
}
} /* end of for (k = 0; k< n; k++) */
for (k = n-1; k >= 0; k--)
{
if (js[k] != k)
{
for (j = 0; j <= n-1; j++)
{
memcpy(p, &m64->matr[k][j*4], 4*sizeof(int));
memcpy(&m64->matr[k][j*4], &m64->matr[js[k]][j*4], 4*sizeof(int));
memcpy(&m64->matr[js[k]][j*4], p, 4*sizeof(int));
}
}
if (is[k] != k)
{
for (i = 0; i < n; i++)
{
memcpy(p, &m64->matr[i][k*4], 4*sizeof(int));
memcpy(&m64->matr[i][k*4], &m64->matr[i][is[k]*4], 4*sizeof(int));
memcpy(&m64->matr[i][is[k]*4], p, 4*sizeof(int));
// printINT64(&m64->matr[i][k*4],fmatrix);
// printINT64(&m64->matr[i][is[k]*4],fmatrix);
}
}
}
free(is); free(js);
}
int main()
{
Matrix G;
Matrix64 G64;
int i,j;
unsigned int tmp[4];
double a[27][27]={{1,-4.640262500000e+001,-2.053342400000e+001,3.6764661e+000,2.0188441e+001,1.081035800000e+001,4.5164671e+000,-1.9639101e-001,-2.6143971e+000,-2.2758861e+000,1.2016701e-001,2.5969531e+000,1.7716381e+000,-3.854264600000e+001,1.9586901e-001,-4.9078501e-001,-6.5073401e-001,-1.2701101e-001,6.9057001e-002,3.8049201e-001,3.4213701e-001,-1.1030001e-002,8.5376001e-002,6.3223401e-001,-1.7883501e-001,-1.0238761e+000,-7.3588701e-001 },
{4.640262500000e+001,2.697546990000e+002,3.807699300000e+001,-3.102123100000e+001,-4.269045100000e+001,-2.659456600000e+001,-2.032316300000e+001,6.8487401e-001,2.8304861e+000,-4.7390461e+000,-6.8334501e-001,-8.8620981e+000,-1.9529701e+000,1.322736790000e+002,-8.9717101e-001,3.2223501e+000,3.5375001e+000,6.8046501e-001,2.8339301e-001,-1.2245121e+000,-9.1865301e-001,-1.6826001e-002,-2.9686511e+000,-1.7385491e+000,1.3678311e+000,1.0848591e+000,1.0617271e+000 },
{-2.053342400000e+001,3.807699300000e+001,4.653355300000e+001,2.7498081e+000,-3.8119271e+001,-2.051174300000e+001,-5.5493791e+000,2.2857301e-001,4.8606681e+000,6.5447351e+000,-3.7515401e-001,-3.7762521e+000,-3.8157211e+000,5.897739900000e+001,-7.4670301e-001,1.4536701e-001,5.7142001e-001,3.9771001e-002,-1.9423601e-001,-6.3573401e-001,-6.5206901e-001,3.9257001e-002,8.7983301e-001,-1.3098501e+000,-5.2668001e-002,2.2395391e+000,1.5676531e+000 },
{3.6764661e+000,-3.102123100000e+001,2.7498081e+000,9.2218091e+000,3.3348001e-002,1.6696721e+000,1.9972371e+000,-6.8866101e-001,-1.9636251e+000,8.9284201e-001,-9.1222501e-001,9.3410601e-001,-3.8620701e-001,-8.5162851e+000,-4.0137001e-002,-3.7328601e-001,-5.0841301e-001,-2.8239001e-002,-5.9864001e-002,2.6588601e-001,1.1164901e-001,7.8900001e-002,2.9757101e-001,-7.3869001e-002,-4.7382601e-001,-2.4262001e-002,-7.2532001e-002 },
{2.0188441e+001,-4.269045100000e+001,-3.8119271e+001,3.3348001e-002,4.543972900000e+001,2.033414800000e+001,6.2456291e+000,3.3998401e-001,-5.7849411e+000,-8.7159171e+000,3.2189101e-001,3.9799861e+000,4.7142371e+000,-6.511386600000e+001,-5.7760801e-001,-6.1685301e-001,-6.3539801e-001,-3.7456601e-001,3.9655201e-001,3.9453801e-001,4.5537601e-001,-1.0379201e-001,-8.2266001e-002,9.6097401e-001,2.1022001e-002,-2.5641531e+000,-1.6572681e+000 },
{1.081035800000e+001,-2.659456600000e+001,-2.051174300000e+001,1.6696721e+000,2.033414800000e+001,1.062089600000e+001,3.3583791e+000,-1.9188201e-001,-3.2222451e+000,-3.5493041e+000,-1.4216101e-001,2.0869821e+000,1.9693541e+000,-3.199186600000e+001,8.4549001e-002,-2.4614301e-001,-4.1849301e-001,-9.2713001e-002,1.2396601e-001,3.3739801e-001,3.0976201e-001,-8.8280001e-003,-2.2140901e-001,5.4455201e-001,-1.1543201e-001,-1.2047961e+000,-8.2844901e-001 },
{4.5164671e+000,-2.032316300000e+001,-5.5493791e+000,1.9972371e+000,6.2456291e+000,3.3583791e+000,1.7859701e+000,-2.8281001e-002,-6.6460701e-001,-3.8491401e-001,4.2501001e-002,8.5993501e-001,4.8611501e-001,-1.3385901e+001,3.0087001e-002,-2.4406501e-001,-2.7477001e-001,-6.8448001e-002,1.0821001e-002,1.1439801e-001,9.7221001e-002,-5.1040001e-003,1.6569001e-001,1.8815501e-001,-9.0790001e-002,-2.7674401e-001,-2.0383401e-001 },
{-1.9639101e-001,6.8487401e-001,2.2857301e-001,-6.8866101e-001,3.3998401e-001,-1.9188201e-001,-2.8281001e-002,1.2614401e-001,2.9928401e-001,-3.4641001e-002,1.3574701e-001,-6.1495001e-002,6.0837001e-002,-7.6735001e-002,-5.4526001e-002,-1.6621001e-002,2.5426001e-002,-2.2621001e-002,9.9840001e-003,-4.3455001e-002,-2.3573001e-002,-1.3911001e-002,5.9092001e-002,-1.4970001e-003,4.5433001e-002,1.1263001e-002,1.7712001e-002 },
{-2.6143971e+000,2.8304861e+000,4.8606681e+000,-1.9636251e+000,-5.7849411e+000,-3.2222451e+000,-6.6460701e-001,2.9928401e-001,2.0047531e+000,1.6404491e+000,4.6399401e-001,-6.2243301e-001,-5.8729101e-001,7.3045611e+000,7.8914001e-002,1.2380001e-002,1.0784301e-001,3.4330001e-003,-5.8583001e-002,-1.5430401e-001,-1.0655501e-001,-2.4511001e-002,2.0014801e-001,-7.0014001e-002,1.2754601e-001,4.6057701e-001,3.1092501e-001 },
{-2.2758861e+000,-4.7390461e+000,6.5447351e+000,8.9284201e-001,-8.7159171e+000,-3.5493041e+000,-3.8491401e-001,-3.4641001e-002,1.6404491e+000,2.5520421e+000,1.2188401e-001,-5.0696201e-001,-1.0359111e+000,8.2462241e+000,2.4573501e-001,-2.3374001e-002,-2.5282001e-002,5.3624001e-002,-1.1939801e-001,-4.9032001e-002,-6.4092001e-002,1.6493001e-002,1.9598801e-001,-1.0156701e-001,-3.4822001e-002,5.9971101e-001,3.6730201e-001 },
{1.2016701e-001,-6.8334501e-001,-3.7515401e-001,-9.1222501e-001,3.2189101e-001,-1.4216101e-001,4.2501001e-002,1.3574701e-001,4.6399401e-001,1.2188401e-001,2.2242801e-001,-5.7200001e-003,4.8927001e-002,-7.8397801e-001,1.3920001e-003,-2.1356001e-002,1.5593001e-002,-1.6322001e-002,1.0730001e-003,-3.8675001e-002,-1.4307001e-002,-1.6159001e-002,5.9643001e-002,3.0795001e-002,6.0156001e-002,3.5711001e-002,2.8899001e-002 },
{2.5969531e+000,-8.8620981e+000,-3.7762521e+000,9.3410601e-001,3.9799861e+000,2.0869821e+000,8.5993501e-001,-6.1495001e-002,-6.2243301e-001,-5.0696201e-001,-5.7200001e-003,5.3687501e-001,3.5489601e-001,-7.5258011e+000,1.3599001e-002,-9.8808001e-002,-1.2889201e-001,-2.5371001e-002,1.7539001e-002,7.8789001e-002,6.7818001e-002,-3.4000001e-005,1.4575001e-002,1.1195101e-001,-4.4053001e-002,-2.0761101e-001,-1.4731101e-001 },
{1.7716381e+000,-1.9529701e+000,-3.8157211e+000,-3.8620701e-001,4.7142371e+000,1.9693541e+000,4.8611501e-001,6.0837001e-002,-5.8729101e-001,-1.0359111e+000,4.8927001e-002,3.5489601e-001,5.1936001e-001,-5.9907631e+000,-8.5756001e-002,-4.0102001e-002,-3.2019001e-002,-3.8543001e-002,4.9427001e-002,2.5867001e-002,3.8387001e-002,-1.3681001e-002,-2.9885001e-002,8.8487001e-002,2.2316001e-002,-2.7460801e-001,-1.7197501e-001 },
{-3.854264600000e+001,1.322736790000e+002,5.897739900000e+001,-8.5162851e+000,-6.511386600000e+001,-3.199186600000e+001,-1.3385901e+001,-7.6735001e-002,7.3045611e+000,8.2462241e+000,-7.8397801e-001,-7.5258011e+000,-5.9907631e+000,1.169583690000e+002,8.2252001e-002,1.6128011e+000,1.8099421e+000,5.6701901e-001,-3.3511201e-001,-8.9368001e-001,-8.7347301e-001,1.0811501e-001,-6.2625301e-001,-1.7757241e+000,3.4811401e-001,3.2436581e+000,2.2332451e+000 },
{1.9586901e-001,-8.9717101e-001,-7.4670301e-001,-4.0137001e-002,-5.7760801e-001,8.4549001e-002,3.0087001e-002,-5.4526001e-002,7.8914001e-002,2.4573501e-001,1.3920001e-003,1.3599001e-002,-8.5756001e-002,8.2252001e-002,1.2130401e-001,2.5520001e-002,-1.1693001e-002,2.6396001e-002,-2.0556001e-002,2.6365001e-002,1.9988001e-002,6.4410001e-003,-5.2686001e-002,3.4037001e-002,-6.6960001e-003,3.1253001e-002,7.8880001e-003 },
{-4.9078501e-001,3.2223501e+000,1.4536701e-001,-3.7328601e-001,-6.1685301e-001,-2.4614301e-001,-2.4406501e-001,-1.6621001e-002,1.2380001e-002,-2.3374001e-002,-2.1356001e-002,-9.8808001e-002,-4.0102001e-002,1.6128011e+000,2.5520001e-002,5.0887001e-002,4.0434001e-002,1.7598001e-002,-1.5280001e-003,-3.7820001e-003,-3.0630001e-003,2.5350001e-003,-6.1582001e-002,-1.0428001e-002,1.2556001e-002,1.3153001e-002,8.9140001e-003 },
{-6.5073401e-001,3.5375001e+000,5.7142001e-001,-5.0841301e-001,-6.3539801e-001,-4.1849301e-001,-2.7477001e-001,2.5426001e-002,1.0784301e-001,-2.5282001e-002,1.5593001e-002,-1.2889201e-001,-3.2019001e-002,1.8099421e+000,-1.1693001e-002,4.0434001e-002,4.9514001e-002,7.3540001e-003,2.9250001e-003,-2.2134001e-002,-1.5382001e-002,-1.9500001e-003,-2.9853001e-002,-2.2261001e-002,2.4687001e-002,2.4927001e-002,2.1648001e-002 },
{-1.2701101e-001,6.8046501e-001,3.9771001e-002,-2.8239001e-002,-3.7456601e-001,-9.2713001e-002,-6.8448001e-002,-2.2621001e-002,3.4330001e-003,5.3624001e-002,-1.6322001e-002,-2.5371001e-002,-3.8543001e-002,5.6701901e-001,2.6396001e-002,1.7598001e-002,7.3540001e-003,1.0258001e-002,-4.8100001e-003,4.9520001e-003,2.4730001e-003,2.8480001e-003,-2.4919001e-002,-9.7800001e-004,-1.8310001e-003,1.3778001e-002,6.6490001e-003 },
{6.9057001e-002,2.8339301e-001,-1.9423601e-001,-5.9864001e-002,3.9655201e-001,1.2396601e-001,1.0821001e-002,9.9840001e-003,-5.8583001e-002,-1.1939801e-001,1.0730001e-003,1.7539001e-002,4.9427001e-002,-3.3511201e-001,-2.0556001e-002,-1.5280001e-003,2.9250001e-003,-4.8100001e-003,6.5950001e-003,-1.6280001e-003,2.1700001e-004,-1.6540001e-003,-1.7710001e-003,1.5120001e-003,3.7680001e-003,-2.5184001e-002,-1.4165001e-002 },
{3.8049201e-001,-1.2245121e+000,-6.3573401e-001,2.6588601e-001,3.9453801e-001,3.3739801e-001,1.1439801e-001,-4.3455001e-002,-1.5430401e-001,-4.9032001e-002,-3.8675001e-002,7.8789001e-002,2.5867001e-002,-8.9368001e-001,2.6365001e-002,-3.7820001e-003,-2.2134001e-002,4.9520001e-003,-1.6280001e-003,2.3130001e-002,1.6222001e-002,4.0630001e-003,-2.0890001e-002,1.7604001e-002,-1.7292001e-002,-3.0016001e-002,-2.4691001e-002 },
{3.4213701e-001,-9.1865301e-001,-6.5206901e-001,1.1164901e-001,4.5537601e-001,3.0976201e-001,9.7221001e-002,-2.3573001e-002,-1.0655501e-001,-6.4092001e-002,-1.4307001e-002,6.7818001e-002,3.8387001e-002,-8.7347301e-001,1.9988001e-002,-3.0630001e-003,-1.5382001e-002,2.4730001e-003,2.1700001e-004,1.6222001e-002,1.2964001e-002,1.7440001e-003,-1.6569001e-002,1.8694001e-002,-8.0000001e-003,-2.9435001e-002,-2.2662001e-002 },
{-1.1030001e-002,-1.6826001e-002,3.9257001e-002,7.8900001e-002,-1.0379201e-001,-8.8280001e-003,-5.1040001e-003,-1.3911001e-002,-2.4511001e-002,1.6493001e-002,-1.6159001e-002,-3.4000001e-005,-1.3681001e-002,1.0811501e-001,6.4410001e-003,2.5350001e-003,-1.9500001e-003,2.8480001e-003,-1.6540001e-003,4.0630001e-003,1.7440001e-003,1.6860001e-003,-5.9160001e-003,-1.5890001e-003,-5.2420001e-003,2.4140001e-003,4.5700001e-004 },
{8.5376001e-002,-2.9686511e+000,8.7983301e-001,2.9757101e-001,-8.2266001e-002,-2.2140901e-001,1.6569001e-001,5.9092001e-002,2.0014801e-001,1.9598801e-001,5.9643001e-002,1.4575001e-002,-2.9885001e-002,-6.2625301e-001,-5.2686001e-002,-6.1582001e-002,-2.9853001e-002,-2.4919001e-002,-1.7710001e-003,-2.0890001e-002,-1.6569001e-002,-5.9160001e-003,1.0908301e-001,-1.3967001e-002,-3.0680001e-003,4.2410001e-002,3.1558001e-002 },
{6.3223401e-001,-1.7385491e+000,-1.3098501e+000,-7.3869001e-002,9.6097401e-001,5.4455201e-001,1.8815501e-001,-1.4970001e-003,-7.0014001e-002,-1.0156701e-001,3.0795001e-002,1.1195101e-001,8.8487001e-002,-1.7757241e+000,3.4037001e-002,-1.0428001e-002,-2.2261001e-002,-9.7800001e-004,1.5120001e-003,1.7604001e-002,1.8694001e-002,-1.5890001e-003,-1.3967001e-002,4.1944001e-002,2.4720001e-003,-4.8274001e-002,-3.5868001e-002 },
{-1.7883501e-001,1.3678311e+000,-5.2668001e-002,-4.7382601e-001,2.1022001e-002,-1.1543201e-001,-9.0790001e-002,4.5433001e-002,1.2754601e-001,-3.4822001e-002,6.0156001e-002,-4.4053001e-002,2.2316001e-002,3.4811401e-001,-6.6960001e-003,1.2556001e-002,2.4687001e-002,-1.8310001e-003,3.7680001e-003,-1.7292001e-002,-8.0000001e-003,-5.2420001e-003,-3.0680001e-003,2.4720001e-003,2.6407001e-002,5.2140001e-003,7.2650001e-003 },
{-1.0238761e+000,1.0848591e+000,2.2395391e+000,-2.4262001e-002,-2.5641531e+000,-1.2047961e+000,-2.7674401e-001,1.1263001e-002,4.6057701e-001,5.9971101e-001,3.5711001e-002,-2.0761101e-001,-2.7460801e-001,3.2436581e+000,3.1253001e-002,1.3153001e-002,2.4927001e-002,1.3778001e-002,-2.5184001e-002,-3.0016001e-002,-2.9435001e-002,2.4140001e-003,4.2410001e-002,-4.8274001e-002,5.2140001e-003,1.6562501e-001,1.0748501e-001 },
{-7.3588701e-001,1.0617271e+000,1.5676531e+000,-7.2532001e-002,-1.6572681e+000,-8.2844901e-001,-2.0383401e-001,1.7712001e-002,3.1092501e-001,3.6730201e-001,2.8899001e-002,-1.4731101e-001,-1.7197501e-001,2.2332451e+000,7.8880001e-003,8.9140001e-003,2.1648001e-002,6.6490001e-003,-1.4165001e-002,-2.4691001e-002,-2.2662001e-002,4.5700001e-004,3.1558001e-002,-3.5868001e-002,7.2650001e-003,1.0748501e-001,7.1515001e-002 }};
fmatrix = fopen("MLLRMatrix.txt", "w");
CreateMatrix(27, 27, &G);
CreateMatrix64(27, 27, &G64);
for(i=0;i<G.nRows;i++)
{
for(j=0;j<G.nCols;j++)
{
G.matr[i][j] = (int)(a[i][j]*1024); /* G为Q10 */
}
}
MatrTOMatr64(&G, 10, &G64, 24);
// printMatrix(G,fmatrix,"G");
printMatrix64(G64,24,fmatrix,"G64");
inversMatrix64(&G64);
printMatrix64(G64,24,fmatrix,"G64 inverse");
/* -----------Add----------- */
// Add64_Q(&G64.matr[0][0], &G64.matr[1][0], &G64.matr[2][0]);
/* -----------Minus--------- */
// ToCompCode(&G64.matr[1][0], tmp);
// Add64_Q(&G64.matr[0][0], tmp, &G64.matr[2][0]); /* use add to do minus operation */
// for(i=0;i<1000000;i++)
// Multiply64_Q(&G64.matr[0][0], &G64.matr[1][0], &G64.matr[2][0], 22);
// ToCompCode(&G64.matr[2][0], tmp);
// Divide64_Q(&G64.matr[0][0], &G64.matr[1][0], &G64.matr[2][0], 24);
// ToCompCode(&G64.matr[2][0], tmp);
// ToCompCode(&G64.matr[2][0], tmp);
// printMatrix64(G64, fmatrix, "invG");
FreeMatrix64(&G64);
FreeMatrix(&G);
fclose(fmatrix);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -