我需要将两个矩阵相乘,但输出矩阵的最后一列得到不同的输出。一定有逻辑错误,但无法发现。
我仍然不知道如何调试,所以这就是原因。
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");
}
最佳答案
当您将长整数乘以长整数(有符号32位+31位数据)时,结果可能高达有符号63位(31+31=62 + 1位符号),并且当您累加时,范围会变得更大,具有 log2 位的累加操作次数。您的代码无法判断matrixA和matrixB是长整数还是短整数,但即使对于短整数,累积也可能导致溢出。您可以通过饱和或足够低的值来保护您的代码,但这需要更多信息。请引用1如果这是你的情况
关于c - 最后一个循环的输出不是预期的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54386821/