キッズ・ハック・プログラミング

子供向けプログラミングハックを行います。 題材として、「バーゼル問題」を取り上げます。

バーゼル問題というのはどういうものか?

$$ \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なのは、正常終了を意味します。