teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

微修正

2020/07/03 12:22

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  ```C
5
5
  #include <stdio.h>
6
6
 
7
- #define at(t,x,y) t[y*4+x]
7
+ #define at(t,y,x) t[y*4+x]
8
8
 
9
9
  int main() {
10
10
  float a[16] = {

1

追記

2020/07/03 12:22

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -1,1 +1,45 @@
1
- 簡単もなにもベクトルの内積を4x4回繰り返す以外なんかあるん?
1
+ 簡単もなにもベクトルの内積を4x4回繰り返す以外なんかあるん?
2
+
3
+ [追記] 愚直な実装でよければ:
4
+ ```C
5
+ #include <stdio.h>
6
+
7
+ #define at(t,x,y) t[y*4+x]
8
+
9
+ int main() {
10
+ float a[16] = {
11
+ 1.000000,0.000000,0.000000,0.000000,
12
+ 0.000000,1.000000,0.000000,0.000000,
13
+ 0.000000,0.000000,1.000000,0.000000,
14
+ 0.000000,0.000000,0.000000,1.000000 };
15
+
16
+ float b[16] = {
17
+ 1.000000,0.000000,0.000000,0.000000,
18
+ 0.000000,1.000000,0.000000,0.000000,
19
+ 0.000000,0.000000,1.000000,0.000000,
20
+ 0.000000,0.000000,0.000000,1.000000 };
21
+
22
+ float c[16];
23
+
24
+ int row, col;
25
+ for ( row = 0; row < 4; ++row ) {
26
+ for ( col =0; col < 4; ++col ) {
27
+ float sum = 0.0f;
28
+ int t;
29
+ for ( t = 0; t <4; ++t ) {
30
+ sum += at(a,row,t) * at(b,t,col);
31
+ }
32
+ at(c,row,col) = sum;
33
+ }
34
+ }
35
+
36
+ // できたかな?
37
+ for ( row = 0; row < 4; ++row) {
38
+ for ( col = 0; col < 4; ++col) {
39
+ printf("%f ", at(c,row,col));
40
+ }
41
+ puts("");
42
+ }
43
+ return 0;
44
+ }
45
+ ```