定数畳み込みにより以下のコードを最適化する。という問題です。
ちなみに、xはグローバル変数など任意の変数とみなして、下記に書いた部分についてだけを考えるとしてお願いします。
int y = 4;
int w = 3;
int z = 0;
w = y-6;
while (x-y> 0) {
y = y+1;
if (x >= y) {
z= w;
} else {
z = 0;
}
}
return z;
以下のように最適化してみたのですが、合っているでしょうか?あまり、慣れておらず不安があるためわかる方説明していただけるとありがたいです。よろしくお願いいたします。
int y = 4;
int w = 3;
int z = 0;
w = -2;
while (x-4> 0) {
y = 5;
if (x >= 5) {
z = -2;
} else {
z = 0;
}
}
return z;
質問文の「問題」とは課題のようなものなのか、実際に時間がかかるという問題があって解決しようとしているかによって回答は変わると思います。
もし後者であれば、テストコードを入れるなどしていろいろ変更した後でも結果が同じになることを保証した状態を作った上で、時間を実測するようにして時間を詰めていくようにする必要があると思います。
(手作業で苦労してあれこれ最適化しても、実はコンパイラが最適化をしていてあまり差が出なかったりすることがあると思います。)
問題というのは問いという意味で表現しました。今回の問いでは、示したコードの範囲でシンプルに定数にできるものは定数に、出来ないものは変数のままに変えたいです。
回答1件
あなたの回答
tips
プレビュー