⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intmatrixinv.cpp

📁 亲手所编
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}	
	
	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 + -