回答編集履歴

3

ソース差し替え

2016/12/02 22:16

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -12,11 +12,13 @@
12
12
 
13
13
 
14
14
 
15
- #define MAXSIZ (1000)
15
+ #define MAXSIZ (10000)
16
16
 
17
17
 
18
18
 
19
19
  void init(double m[MAXSIZ][MAXSIZ], int siz);
20
+
21
+ void mClear(double m[MAXSIZ][MAXSIZ], int siz);
20
22
 
21
23
  void multiply(const double mA[MAXSIZ][MAXSIZ],const double mB[MAXSIZ][MAXSIZ],double mC[MAXSIZ][MAXSIZ],int siz);
22
24
 
@@ -64,6 +66,8 @@
64
66
 
65
67
  init(mB,matSiz);
66
68
 
69
+ mClear(mC,matSiz);
70
+
67
71
  //
68
72
 
69
73
  clock_t st= clock();
@@ -76,7 +80,9 @@
76
80
 
77
81
  print(mC,matSiz);
78
82
 
79
- printf("MatSiz= %d %fsec\n",matSiz, ((double)(et-st))/(double)CLOCKS_PER_SEC);
83
+ printf("MatSiz= %d %f msec\n",matSiz, ((et-st)*1000.0)/CLOCKS_PER_SEC);
84
+
85
+ //
80
86
 
81
87
  return 0;
82
88
 
@@ -102,6 +108,24 @@
102
108
 
103
109
  //
104
110
 
111
+ void mClear(double m[MAXSIZ][MAXSIZ], int siz)
112
+
113
+ {
114
+
115
+ for( int i= 0; i < siz; i++){
116
+
117
+ for( int j= 0; j < siz; j++){
118
+
119
+ m[i][j]= 0.0;
120
+
121
+ }
122
+
123
+ }
124
+
125
+ }
126
+
127
+ //
128
+
105
129
  void multiply(const double mA[MAXSIZ][MAXSIZ],const double mB[MAXSIZ][MAXSIZ],double mC[MAXSIZ][MAXSIZ],int siz)
106
130
 
107
131
  {
@@ -112,7 +136,7 @@
112
136
 
113
137
  for( int k= 0; k < siz; k++){
114
138
 
115
- mC[i][j]= mA[i][k]*mB[k][j];
139
+ mC[i][j] += mA[i][k]*mB[k][j];
116
140
 
117
141
  }
118
142
 

2

誤記修正

2016/12/02 22:16

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -1,4 +1,4 @@
1
- 退会済のようですが・・・今時の環境で1秒に計算できる正方行列のサイズは10万を超えると思います(以下のプログラムで1までは試しましたが計測できませんでした)。doubleが8バイトとして約240GBのメモリが必要です。環境依存と言えばそうなのですが・・・いまいち出題者の意図が分かりません。
1
+ 退会済のようですが・・・今時の環境で1秒に計算できる正方行列のサイズは10万を超えると思います(以下のプログラムで1000までは試しましたが時間が短すぎて計測できませんでした)。10万だとdoubleが8バイトとして約240GBのメモリが必要です。環境依存と言えばそうなのですが・・・いまいち出題者の意図が分かりません。
2
2
 
3
3
  (FreeBSD 10.3-RELEASE-p11 clang version 3.8.1)
4
4
 
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- #define MAXSIZ (10000)
15
+ #define MAXSIZ (1000)
16
16
 
17
17
 
18
18
 

1

誤記修正

2016/12/02 09:54

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -22,7 +22,15 @@
22
22
 
23
23
  void print(const double m[MAXSIZ][MAXSIZ], int siz);
24
24
 
25
+ //
25
26
 
27
+ double mA[MAXSIZ][MAXSIZ];
28
+
29
+ double mB[MAXSIZ][MAXSIZ];
30
+
31
+ double mC[MAXSIZ][MAXSIZ];
32
+
33
+ //
26
34
 
27
35
  int main(int agc, char *agv[])
28
36
 
@@ -49,14 +57,6 @@
49
57
  exit(2);
50
58
 
51
59
  }
52
-
53
- //
54
-
55
- double mA[MAXSIZ][MAXSIZ];
56
-
57
- double mB[MAXSIZ][MAXSIZ];
58
-
59
- double mC[MAXSIZ][MAXSIZ];
60
60
 
61
61
  //
62
62