最后一个循环的输出不是预期的

时间:2019-01-27 09:44:10

标签: c arrays multidimensional-array

我需要将两个矩阵相乘,但是输出矩阵的最后一列得到不同的输出。必须存在一些逻辑错误,但不能发现它。

我仍然不知道如何调试,所以这就是原因。

    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");
    }

1 个答案:

答案 0 :(得分:1)

当您将长整数乘以长整数(带符号的32位+ 31位数据)时,结果可能高达带符号的63位(31 + 31 = 62 +1个符号),并且当您累加时,范围会更大,其累积操作数为log2位。您的代码不会告诉您matrixA和matrixB是长整数还是短整数,但是即使是短整数,累积也可能导致溢出。您可以通过饱和或设置足够低的值来保护代码,但这需要更多信息。如果您遇到这种情况,请参阅1