doubleからfloatにすると表示が変になる
しょうもない質問ですいません。
下記のC言語の行列積のコードでは行列の変数をdoubleとしていますが、これをfloatに全て置き換えると、printfで表示させる結果がバグってしまいます。
原因は何でしょうか?
最近ひさしぶりにC言語を触ったので、しょうもないところでつまずきました。
お願いします。
-----------------------------------------
#include <stdio.h>
#include <stdlib.h>
#define N 10 //N次の正方行列まで扱えるようにする
void matrixmultiply(int n,double a[N][N],double b[N][N],double c[N][N]);
int main(int argc, char** argv)
{
int i,j,n;
double A[N][N],B[N][N],C[N][N];
FILE *readin1,*readin2;
/*行列の値が書き込まれたファイルを開く*/
if((readin1=fopen("a.dat","r"))==NULL) {
printf("a.datを開けません\n");
exit(1);
}
if((readin2=fopen("b.dat","r"))==NULL) {
printf("b.datを開けません\n");
exit(1);
}
printf("行列の次数を入力してください\n");
scanf("%d",&n);
printf("%d次の正方行列の掛け算を行います\n\n",n);
/*ファイルから数値を読み込み、配列に代入する*/
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
fscanf(readin1,"%lf",&A[i][j]);
fscanf(readin2,"%lf",&B[i][j]);
}
}
matrixmultiply(n,A,B,C); //関数を呼び出し行列の掛け算を行う。
/*結果を表示する*/
printf("計算結果\n");
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
printf("%lf ",C[i][j]);
}
printf("\n");
}
fclose(readin1);
fclose(readin2);
return 0;
}
/*掛け算を行う行列2つと、結果を入れる行列を引数として受け取る。*/
void matrixmultiply(int n,double a[N][N],double b[N][N],double c[N][N])
{
int i,j,k;
/*受け取った2つの行列の掛け算を行う。*/
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
for(k=0;k<n;k++) {
c[i][j]+=a[i][k]*b[k][j];
}
}
}
}
お礼
vectorがそれぞれのvectorを格納しているのではなく、 vector<vector<double>>という中に二次元配列があると勘違いしておりました。 ご回答ありがとうございました。