用C6474实现了一个浮点的矩阵求逆的算法(直接定义浮点的矩阵即采用C语言里面的库函数),但在CCS里得到的结果和用MATLAB以及visual studio里面得到的不一样,有零点几的差距,这是为什么?同样的程序,不一样的结果,有什么解决的方法吗?谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
整体程序是由3个核共同完成的,其中一个核作为主核(核0),控制其他两个核的操作,采用IPC模块实现核间通信,sendmessageonIPC(1),sendmessageonIPC(2)分别代表通知另外两个核,1表示是通知核1,2表示通知核2,这两句代码的顺序调换一下,得到的结果也不一样,数据会出现1.#QNAN,不明白它的意思,但是我的程序的思想和这个顺序应该是无关的,以下是核1与核2中主要实现计算的代码:
////////////////////////////////////////////////////////
e=0;
for(i=0;i<4;i++)
e+=pDdr2Data_A[i * COLUMN + p_1] * pDdr2Data_A[i * COLUMN + q_1];
if(abs(e)>1e-9){
P=pDdr2Data_length[p_1],Q=pDdr2Data_length[q_1];
if(P<Q){
//********交换A,V的两列*****
for(i=0;i<4;i++){
temp=pDdr2Data_A[i * COLUMN + p_1];
pDdr2Data_A[i * COLUMN + p_1]=pDdr2Data_A[i * COLUMN + q_1];
pDdr2Data_A[i * COLUMN + q_1]=temp;
temp=pDdr2Data_V[i * COLUMN + p_1];
pDdr2Data_V[i * COLUMN + p_1]=pDdr2Data_V[i * COLUMN + q_1];
pDdr2Data_V[i * COLUMN + q_1]=temp;
}
//************************
temp=P;
P=Q;
Q=temp;
temp=pDdr2Data_length[p_1];
pDdr2Data_length[p_1]=pDdr2Data_length[q_1];
pDdr2Data_length[q_1]=temp;
//************************
}
t=(Q-P)/(2 * e);
//**************由t算alfa的,
if(fabs(t)>1024)
;//continue;
else{
if(fabs(t)>8)
alfa=1/(2 * t);
else{
if(fabs(t)>0.25){
if(t>=0) alfa=-t+sqrt(1+t * t);
else alfa=-t-sqrt(1+t * t);
}
else
alfa=1-t+t * t/2;
}
}
/////////////////////////////////////////////////////////////////////
pDdr2Data_length[p_1]=P-2 * alfa * e+alfa * alfa * Q;
pDdr2Data_length[q_1]=alfa * alfa * P+2 * alfa * e+Q;
////////////////////////////////////////////////////////////////////
for(i=0;i<4;i++){
temp=pDdr2Data_A[i * COLUMN + p_1]-alfa * pDdr2Data_A[i * COLUMN + q_1];
pDdr2Data_A[i * COLUMN + q_1]=alfa * pDdr2Data_A[i * COLUMN + p_1] + pDdr2Data_A[i * COLUMN + q_1];
pDdr2Data_A[i * COLUMN + p_1]=temp;
temp=pDdr2Data_V[i * COLUMN + p_1]- alfa * pDdr2Data_V[i * COLUMN + q_1];
pDdr2Data_V[i * COLUMN + q_1]=alfa * pDdr2Data_V[i * COLUMN + p_1]+ pDdr2Data_V[i * COLUMN + q_1];
pDdr2Data_V[i * COLUMN + p_1]=temp;
}
}
谢谢了