第1種情報処理技術者試験 1997年度 = 平成9年度 午前 問29

 目的プログラムの実行時間を短くするためにコンパイラが行う最適化として、正しいものはどれか。ここで、“*”は乗算、“**”はべき乗を表すものとする。

ア X*XはX**2、X+XはX*2のように、同値の乗算はべき乗へ、加算は乗算へと演算の種類を変える。
イ 繰返し回数の多いループは、繰返し回数がより少ないループを複数回繰り返すように変形する。例えば、10,000回実行されるループは、100回実行されるループを100回線り返すようにする。
ウ 定数が格納される変数を追跡し、途中で値が変更されないことが確認できれば、その変数を定数で置き換える。
エ プログラム中の2か所以上で同じ処理を行っている場合は、それをサブルーチン化し、元のプログラムのその部分をサブルーチン呼出しで置き換える。

解答



解説

 通常は、加算より乗算、乗算よりべき乗の方が、より多くの計算時間を要します。したがって、逆の変形が必要であり、X**2はX*X、X*2はX+Xのように、べき乗へは同値の乗算へ、乗算は加算へと演算の種類を変えます。

 繰返し回数の多いループを、繰返し回数がより少ないループを複数回繰り返すように変形すると、終了条件の判定が増えてしまいます。

 定数が格納される変数を追跡し、途中で値が変更されないことが確認できれば、その変数を定数で置き換えます。

 プログラム中の2か所以上で同じ処理を行っている場合は、それをサブルーチン化し、元のプログラムのその部分をサブルーチン呼出しで置き換えると、呼出しコストが増えてしまいます。


BohYoh.comトップページへ