Doubling2の中心部を見てみましょう.
while(x<100000000){ p=p+1; x=x*2; }
forによる繰返しでは,制御する パラメータについての初期値と変更方法,それに反復の継続条件を書きました.それに対してwhileでは継続条件しか書きません.継続条件は終了条件の否定ですから,この条件がいつまでたっても「不成立」にならないと,whileによる実行は終ることなく永久に続いてしまいます.つまり,繰返しを終了させるのはプログラムを書く人の側の責任なのです.これに「気をつかわない」と,whileによる実行はすぐに止まらなくなります.この状態を無限ループと呼びます.これがプログラムにとって非常に不都合であることは自明でしょう.
whileによる反復が必ず停止するようにプログラムを書くには,
最初は正である「ある値」が繰返しの度に減ってゆく
ように心掛けるようにします.この「ある値」が正値でなくなったら,目的の状態になるようにしておきます.ここの例での「ある値」は
100000000 - x
です.
実数を扱う数値計算では,「どんどん減るけれどもいつまでも正のまま」という値の存在に注意しましょう.たとえば1.0, 0.1, 0.01, 0.001, ...,というぐあいです.これに,コンピュータでの実数の精度の話もからんできますから,問題はさらに複雑になります.必ずゼロになるように保証するためには(正の)整数を使用しなければいけません .
26.1.3.2 監視つき繰返し | 26.1.3.3 止まり方 | 26.1.3.4 計算の手間 | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Mon, 26 Apr 2004 03:35:34 JST (1922d) |