【Python学習帳】023_while文による繰り返し
初学者を対象としている京都大学の無料Python教材の学習中です。
「プログラミング演習 Python 2021」
Version2021_10_08_01.pdf
をCC-BY-NC-NDライセンスに従って引用します。
第5章の制御構造の勉強中で、内包表記に関して教材を離れて少し調べていました。ChatGPTはPython初心者には先生役として十分な相談相手だと知りました。
さて今回は
5.3 while 文による繰り返し
を学びます。
早速にニュートン法のサンプルコードでの演習でした。
平方根の計算を一定の精度を要求して計算するようにしましょう.r1 と r2 は真 の値を挟んでいますので,その差の絶対値 |r1 – r2| は計算の精度として捉えること ができます.
精度が10の-6乗 (1.0E-6) 以上の間は繰り返し処理するコード (p5-6.py) になっています。
無限ループ型 (p5-7.py) も出力は全く同じになります。
出力は同じですが、
p5-6.py との違いは以下の 2 点です.
● ループを開始する際に終了条件を判定していません.
● while 文の条件は継続を判定するためのものですが,break 文を発動する条件 は終了を判定するためのものであり,条件は逆になります.
条件が逆になるとは継続する条件に対して逆に終了する条件で制御するということかと思います。
実際に脱出のための条件が成り立たない場合は Python の実行を強制的に止めなければなりません.キー操作「Ctrl-C」で停止させてください.
とのことでした。
While文の学習と合わせて精度の定義の仕方として絶対精度と相対精度のコラム紹介もありましたので引用しておきます。
Version2021_10_08_01.pdf
http://hdl.handle.net/2433/265459
コンピュータを使った数値の計算では真の値に収束する数列などを使って近似計 算します.
計算をどこで打ち切るかは必要な計算の精度から決まります.
仮に絶対精度0.001を目標と定めたとして
「例えば平方根の計算を考えると 10000 の平方根は 100 ですの で,0.001 という絶対的な精度はかなり高いのに比べ 1/10000 の平方根は 1/100 = 0.01 ですので,0.001 の精度というのはかなり悪いことになります.
そこで,計算で得られる値に対して,一定の比率(例えば 0.001)の精度を要求する
と考えて、真の値との比率で相対的な精度を定義するのが相対精度とのこと。
すなわち
相対精度で計算を終了させることは,理科の計算で行う有効数字の考え方を数値の近似計算に適用したものと言えます.
精度のクライテリアを定める際、選定理由もよく考えないということのように思いました。実は前にあるシステムの要件定義において、必要かなという範囲まで計算値の桁数をしてしてしまったことを想い出しています。
そもそも精度って言葉が正しくわかっている自信がないんですよね...。
「この規格では,測定方法の精確さを表すために“真度”と“精度”の二つの用語を用いている。“真度”は,多数の測定結果の平均値と,真の値又は参照値との一致の程度を示すものである。“精度”は,測定結果の間の一致の程度を示すものである。」
深みにはまる前に今回はここまでで切り上げます。
次回はwhlie文と一緒によく使うif文を学びます。