実現したいこと
正しい計算結果を得る
前提
C言語でdouble型n×nの行列2つの行列積を求めるプログラムを書いたのですが、nを2, 4, 8, と増やしたところ、n=4から計算結果が一部おかしくなってしまいます。
n=4では2回に1回、n=8は毎回おかしくなります。
なお、計算するn×nの行列2つは下記コードにてダミーデータを入れています。
for(i=0; i<N; i++){ for(j=0; j<N; j++){ A[i][j] = (double)i + j; B[i][j] = (double)i + j; } }
発生している問題・エラーメッセージ
n=4の場合です。
14.000000, 20.000000, 26.000000, 32.000000,
20.000000, 30.000000, 40.000000, 50.000000,
26.000000, 40.000000, 54.000000, 68.000000,
32.000000, 50.000000, 68.000000, -421788892257061440000000000000000000000000000000000000000000000000000.000000,
該当のソースコード
#include <stdio.h> #define N 4 int main(int argc, char *argv[]){ double A[N][N], B[N][N], C[N][N]; int i, j, k; /*行列のダミーデータを入力*/ for(i=0; i<N; i++){ for(j=0; j<N; j++){ A[i][j] = (double)i + j; B[i][j] = (double)i + j; } } /*行列積の計算*/ for(i=0; i<N; i++){ for(j=0; j<N; j++){ for(k=0; k<N; k++){ C[i][j]=C[i][j]+(A[i][k]*B[k][j]); } } } /*行列を表示*/ printf("\n");printf("C\n"); for(i=0; i<N; i++){ for(j=0; j<N; j++){ printf("%f, ", C[i][j]); } printf("\n"); } printf("\n"); return 0; }
補足情報(FW/ツールのバージョンなど)
環境はVisual Studio Codeです。
回答1件
あなたの回答
tips
プレビュー