積(かけざん)の演算を行うとき、シフト命令を使えば効率の良いプログラムができる。ビッ
トシフトを用いると積の演算ができる理由は以前述べているが、忘れた人もいるので、も
う一度、説明する。
シフト命令を使った積の演算は、小学生のときに学習をした筆算の掛け算と同じである。
たとえば、
を計算する場合、筆算は
と分解したはずである。そうして、次の手順
でこの除算を行ったはずである。
- を計算し、1桁ずらす(10倍する)。
- を計算する。
- 先の計算結果を合計する。この合計816が
の計算結果である。
同じことを2進数で行う。これがコンピューターによる乗算である。先ほどと
同じ計算(
)を行う。これを2進数で表現すると、
となる。これを先ほど同様の手順で計算する。
- 掛け算は1倍なので計算する必要が無く、最初に
を4桁左
にずらす(ビットシフト)。すると、
となる。
- 次に
を3桁左にずらす。すると、
となる。
- 先の計算結果を合計すると、
となる。これは、10進
数の816である。
シフトと加算命令でかけ算ができることが分かったはずである。
今回の問題の用に分数の場合でも、
と分解する。右に1ビットシフトさせたものと、右に2ビットシフトさせたものを加算すれ
ば良い。
教科書のように
|
(2) |
と分解するのは一般的ではない。
このプログラムのフローチャートを図
3に示す。。
図 3:
教科書のList5-5のプログラムの構造とフローチャート
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年12月25日