キッズ・ハック・プログラミング
子供向けプログラミングハックを行います。 題材として、「バーゼル問題」を取り上げます。バーゼル問題というのはどういうものか?
$$ \frac{1}{1^2}+\frac{1}{2^2}+\frac{1}{3^2}+\frac{1}{4^2}+\frac{1}{5^2}+\frac{1}{6^2}+\cdots = \frac{\pi^2}{6} $$
左辺は平方数の逆数を無限に足していっています。右辺はその値が円周率の2乗を6で割った値に収束することを意味しています。 この式をプログラミングすることによって検証してみましょう。#include <iostream> #include <cmath> using namespace std; int main() { double Left=0.0, Right=0.0, k=1.0, n=999999.0; for (k=1.0; k<=n; k+=1.0) Left += 1.0/(k*k); Right = (M_PI*M_PI)/6.0; cout << "Left = " << Left << endl; cout << "Right = " << Right << endl; return 0; }
1行目は iostreamヘッダファイルを取り込みます。また、 3行目はstd識別子を省略する命令です。 これにより、13,14行目の cout, endlを用いることができます。 2行目は cmathヘッダファイルを取り込みます。これにより、11行目の M_PIを用いることができます。
5行目はメインルーチンの定義です。返り値intを持つのは15行目のreturn 0;に対応しています。 6行目はメインルーチンの開始です。16行目までプログラミングカウンタが下に 向かって動作します。
7行目は各種変数の定義です。Leftは左辺の値を計算するための変数、Rightは 右辺の値を計算するための変数、kは平方数を計算するための変数、nは無限大 の代わりに用いる大きな数です。これら変数はすべて倍精度浮動小数 であるdouble型で定義しています。
9行目のforループは左辺を計算しています。平方数の逆数の無限和の近似です。 11行目では右辺を計算しています。ここにM_PIは、倍精度浮動小数の精度で得られている円周率の値です。
13,14行目は左辺値,右辺値をそれぞれ画面にプリントアウトします。 coutがコンソールの意味です。endlが改行を表します。
15行目はメインルーチンの終了です。返り値が0なのは、正常終了を意味します。