请问大家,我使用arm_mat_mult_f32计算矩阵相乘为什么结果出错了?
函数如下:
static void DSP_MatMult(void)
{
uint8_t i;
/****浮点数数组******************************************************************/
float32_t pDataA[6] = {1.1f, 1.1f, 2.1f, 2.1f, 3.1f, 3.1f};
float32_t pDataB[6] = {1.1f, 1.1f, 2.1f, 2.1f, 3.1f, 3.1f};
float32_t pDataDst[9];
arm_matrix_instance_f32 pSrcA; //3行3列数据
arm_matrix_instance_f32 pSrcB; //3行3列数据
arm_matrix_instance_f32 pDst;
/****浮点数***********************************************************************/
pSrcA.numCols =3;
pSrcA.numRows = 1;
pSrcA.pData = pDataA;
pSrcB.numCols = 1;
pSrcB.numRows = 3;
pSrcB.pData = pDataB;
pDst.numCols = 3;
pDst.numRows = 3;
pDst.pData = pDataDst;
printf("****浮点数1******************************************
");
arm_mat_mult_f32(&pSrcA, &pSrcB, &pDst);
for(i = 0; i < 9; i++)
{
printf("pDataDst[%d] = %f
", i, pDataDst[i]);
}
pSrcA.numCols = 2;
pSrcA.numRows = 2;
pSrcA.pData = pDataA;
pSrcB.numCols = 2;
pSrcB.numRows = 2;
pSrcB.pData = pDataB;
pDst.numCols = 2;
pDst.numRows = 2;
pDst.pData = pDataDst;
printf("****浮点数1******************************************
");
arm_mat_mult_f32(&pSrcA, &pSrcB, &pDst);
for(i = 0; i < 4; i++)
{
printf("pDataDst[%d] = %f
", i, pDataDst[i]);
}
}
计算3*1矩阵和1*3矩阵相乘出错,但是,计算2*2矩阵和2*2矩阵相乘就没有错
结果如下:
初始化完成,进入主循环!
****浮点数1******************************************
pDataDst[0] = 0.000000
pDataDst[1] = 0.000000
pDataDst[2] = 147573952589676420000.000000
pDataDst[3] = 0.000000
pDataDst[4] = 0.000000
pDataDst[5] = 0.000000
pDataDst[6] = 0.000000
pDataDst[7] = 0.000000
pDataDst[8] = 0.000000
****浮点数1******************************************
pDataDst[0] = 3.520000
pDataDst[1] = 3.520000
pDataDst[2] = 6.719999
pDataDst[3] = 6.719999
这是为什么呢?
一周热门 更多>