質問編集履歴
3
改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -23,6 +23,8 @@
|
|
23
23
|
コードを変えるより、日本語の説明がわからないといった感じです。
|
24
24
|
|
25
25
|
|
26
|
+
|
27
|
+
このコードがどのような動きをするコードか説明できません。
|
26
28
|
|
27
29
|
|
28
30
|
|
@@ -102,7 +104,19 @@
|
|
102
104
|
|
103
105
|
### 試したこと
|
104
106
|
|
107
|
+
|
108
|
+
|
105
|
-
|
109
|
+
c00 = a0*b0;
|
110
|
+
|
111
|
+
c01 = a0*b1;
|
112
|
+
|
113
|
+
c10 = a1*b0;
|
114
|
+
|
115
|
+
c11 = a1*b1;
|
116
|
+
|
117
|
+
初めは上のようにコードを書いていたのですが、ソースコードにあるようにしたら、いろいろ応用が効く?のか分からないですが、変更されて、
|
118
|
+
|
119
|
+
「被乗数と乗数をともに16ビットを上位8ビットと下位8ビットに分割し夫々について合計4つの組み合わせで乗算を実施して得られた4つの部分和を加算すると16ビット乗算の積(32ビット)になる」と説明したら、上位8bit、下位8bit、部分積をsれぞれ識別できないのか、部分積と8bitの乗算器の関係には気づかないのかと釘を刺され、頭を抱えています
|
106
120
|
|
107
121
|
右に8ビットシフトがポイントだと思っているのですが、上位8ビット、下位8ビットの意味がよく分かっておりません。うまく説明するために、どのようなことを書けばいいのでしょうか。
|
108
122
|
|
2
改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -52,59 +52,53 @@
|
|
52
52
|
|
53
53
|
```c
|
54
54
|
|
55
|
-
ソースコード
|
56
|
-
|
57
|
-
```#include <stdio.h>
|
58
|
-
|
59
55
|
int main()
|
60
56
|
|
61
57
|
{
|
62
58
|
|
63
|
-
|
59
|
+
unsigned long a, b, c, d;
|
64
60
|
|
65
|
-
|
61
|
+
unsigned long a1, a0, b1, b0, c11, c10, c01, c00;
|
66
62
|
|
67
|
-
|
68
63
|
|
69
|
-
for (b = 0x00; b < 0x10000; ++b)
|
70
64
|
|
71
|
-
|
65
|
+
for (b = 0x00; b < 0x10000; ++b)
|
72
66
|
|
73
|
-
|
67
|
+
{ b1 = (0x0FF00 & b) >> 8;
|
74
68
|
|
75
|
-
|
69
|
+
b0 = 0x0F & b;
|
76
70
|
|
77
|
-
|
71
|
+
for (a = 0x00; a < 0x10000; ++a)
|
78
72
|
|
79
|
-
|
73
|
+
{ d = a * b;
|
80
74
|
|
81
|
-
|
75
|
+
a1 = (0x0FF00 & a) >> 8;
|
82
76
|
|
83
|
-
|
77
|
+
a0 = 0x0F & a;
|
84
78
|
|
85
|
-
|
79
|
+
c00 = apx_mul1(a0,b0); //a0*b0;
|
86
80
|
|
87
|
-
|
81
|
+
c01 = apx_mul2(a0,b1); //a0*b1;
|
88
82
|
|
89
|
-
|
83
|
+
c10 = apx_mul3(a1,b0); //a1*b0;
|
90
84
|
|
91
|
-
|
85
|
+
c11 = apx_mul4(a1,b1); //a1*b1;
|
92
86
|
|
93
|
-
|
87
|
+
c = (c11 << 16) + (c10 << 8) + (c01 << 8) + c00;
|
94
88
|
|
95
|
-
|
89
|
+
// if (c != d)
|
96
90
|
|
97
|
-
|
91
|
+
// printf("%lu * %lu = %lu != %lu¥n", a, b, d, c);
|
98
92
|
|
99
|
-
|
93
|
+
}
|
94
|
+
|
95
|
+
}
|
100
96
|
|
101
97
|
return 0;
|
102
98
|
|
103
99
|
}
|
104
100
|
|
105
|
-
|
101
|
+
```
|
106
|
-
|
107
|
-
|
108
102
|
|
109
103
|
### 試したこと
|
110
104
|
|
1
説明の仕方を追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -17,6 +17,10 @@
|
|
17
17
|
|
18
18
|
|
19
19
|
を説明すべきと注意されたのですが、何回も書き直しさせられて根本的に理解できていないのかなと思いました。コードは説明するためなので、ところどころミスはあるかもしれませんが、すみません。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
コードを変えるより、日本語の説明がわからないといった感じです。
|
20
24
|
|
21
25
|
|
22
26
|
|