2.1 式

2.1
式
コードのほとんどすべて
式?
式ってどれのこと?
►コード内に存在する値を表すあらゆる記述のこと
10
x
count + 1
►値を返す関数も式に含めることが出来る
sin(0.05)
cos(rad) + x
2.1 式
2
実際のコードでは
実際のコードでは複雑な式が登場する
►ただの代入でも関数と変数が入り乱れたり・・・
どんな様子で処理が進むのか見てみよう
// ニュートン法を用いて、
// 実数 d の平方根を取得する関数
double Sqrt(double d) {
double x = d;
for (int i = 0; i < 10; i++) {
x = (pow(x, 2) + d) / (2 * x);
}
return x;
}
2.1 式
3
実際のコードでは
Sqrt(2.0)として呼んだ時のことを考える
►d は 2.0 なので、x = d で x も 2.0 になるよね
ループ1回目での、この行の処理を考えよう
// ニュートン法を用いて、
// 実数 d の平方根を取得する関数
double Sqrt(double d) {
double x = d;
for (int i = 0; i < 10; i++) {
x = (pow(x, 2) + d) / (2 * x);
}
return x;
}
2.1 式
4
式評価の流れ(1)
1. まず x に代入したいけど、右辺が分からない
► 右辺を左から順に解釈してゆく
x=(pow(x,2)+d)/(2*x);
2. 関数 pow を実行したいが x が分からない
► x の内容を読み込んで置き換える
x=(pow( 2.0 ,2)+d)/(2*x);
3. 関数 pow を実行し、戻り値に置き換える
x=( 4.0 +d)/(2*x);
2.1 式
5
式評価の流れ(2)
4. 今度は d が分からない
► d の内容を読み込んで置き換える
x=( 4.0 + 2.0 )/(2*x);
5. ただの定数になったので計算する
x= 6.0 /(2*x);
6. 続いて x が分からない
► x の内容を読み込んで置き換える
x= 6.0 /(2* 2.0 );
2.1 式
6
式評価の流れ(3)
7. ただの定数になったので計算する
x= 6.0 / 4.0 ;
8. ただの定数になったので計算する
x= 1.5 ;
9. 全体が完全に定数になったので代入
x= 1.5 ;
2.1 式
7
流れを把握する意義
バカバカしいみたいだけども重要
►いざ自分で書くときに自然にできるようになろう
特に関数を式に含めるのに慣れよう
►いちいち変数に代入していては非効率だよね
// こういう風にも書けるけど
double a = pow(x, 2) + d;
double b = 2 * x;
x = a / b;
// こっちのがスッキリしてるよね
x = (pow(x, 2) + d) / (2 * x);
2.1 式
8
補足事項
見やすいコードを書こう(式編)
►Wikiを見てね
http://nanzanmmc.net/pc/lecture/game/add
2.1 式
9