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

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

最佳答案

当您将长整数乘以长整数(有符号32位+31位数据)时,结果可能高达有符号63位(31+31=62 + 1位符号),并且当您累加时,范围会变得更大,具有 log2 位的累加操作次数。您的代码无法判断matrixA和matrixB是长整数还是短整数,但即使对于短整数,累积也可能导致溢出。您可以通过饱和或足够低的值来保护您的代码,但这需要更多信息。请引用1如果这是你的情况

关于c - 最后一个循环的输出不是预期的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54386821/

相关文章:

php - PHP中使用数组作为索引访问多维数组

c - 为什么我的 C 代码给出下一个回文的错误输出

c - 如何使单个 "makefile"创建 3 个输出二进制文件

java - 如何将 2 个键和值的 Java String 数组转换为 json 对象

php - 从多维数组中删除未设置的数组

python - 将字典树转换为多维列表

数组的Java ArrayList?

c - 使用函数指针

C 内联 ASM : passing integers to a register

c - 当我定义数组时真正发生了什么