Chapter3 演習問題 円周率の級数による計算プログラム
まず、プログラム全文を載せる。
# -*- coding: cp932 -*- # pical.py # 円周率を計算する。 # 計算誤差も表示する。 import math def main(): print "このプログラムは円周率を級数を用いて計算します。" print "また、計算誤差も出力します。" print n = input("級数の取る和の項数を入力して下さい: ") sum = 4 # 初期化 for k in range(2, n + 1): i = (-1) ** (k - 1) * 4.0 / (2 * k - 1) # 級数のk番目の項の計算。 sum = sum + i print "円周率の計算結果は", sum, "です。" print "誤差は", math.pi - sum, "です。" main()
学んだこと:
- このプログラムは問題の内容を聞いてからちょっと考えて、その形が大体分かった。それですぐにコードを書き始めたのだが、すらすらとは行かなかった。むしろ、書いている途中で何度もいろいろ修正をしなければならなくなり、コードを上下と行き来する羽目になった。教訓:プログラミング言語で書き下す前に、まず擬似コードで全体の構造をはっきりさせた方が良い。
- 地味に整数型と浮動小数点型の区別が重要。
- この級数の収束は遅い。実際、このプログラムを実行すると、
このプログラムは円周率を級数を用いて計算します。 また、計算誤差も出力します。 級数の取る和の項数を入力して下さい: 10 円周率の計算結果は 3.04183961893 です。 誤差は 0.0997530346604 です。 >>> pical.main() このプログラムは円周率を級数を用いて計算します。 また、計算誤差も出力します。 級数の取る和の項数を入力して下さい: 100 円周率の計算結果は 3.13159290356 です。 誤差は 0.00999975003124 です。 >>> pical.main() このプログラムは円周率を級数を用いて計算します。 また、計算誤差も出力します。 級数の取る和の項数を入力して下さい: 1000 円周率の計算結果は 3.14059265384 です。 誤差は 0.000999999749999 です。
というように、1000項計算しても三桁位の精度しかない。