我需要将两个矩阵相乘,但是输出矩阵的最后一列得到不同的输出。必须存在一些逻辑错误,但不能发现它。
我仍然不知道如何调试,所以这就是原因。
if(aCollumn == bRow) {
for(i = 0; i < aCollumn; i++){
for(j = 0; j < bRow; j++) {
for(n = 0; n < aCollumn; n++){
product = matrixA[i][n] * matrixB[n][j];
sum += product;
}
matrixAB[i][j] = sum;
sum = 0;
}
}
}
else {
printf("Matrices are not compatible for multiplication. \n");
}
答案 0 :(得分:1)
当您将长整数乘以长整数(带符号的32位+ 31位数据)时,结果可能高达带符号的63位(31 + 31 = 62 +1个符号),并且当您累加时,范围会更大,其累积操作数为log2位。您的代码不会告诉您matrixA和matrixB是长整数还是短整数,但是即使是短整数,累积也可能导致溢出。您可以通过饱和或设置足够低的值来保护代码,但这需要更多信息。如果您遇到这种情况,请参阅1