Go to the first, previous, next, last section, table of contents.


リスト 練習問題 12 解答「マッチ棒でπを推定」

この問題は対称性を利用することによってかなり簡単にできます。 まず第一に、y 軸を全く無視できることは少し考えれば明白です。 任意の x 成分を選んでマッチ棒の一端とし、任意の方向 @c{$\theta$} θを選んで、そして x と @c{$x + \cos \theta$} x + cos(θ) (これはマッチ棒のもう一方の端の x 座標です) が縦線をまたぐかどうかを調べれば良いのです。 各縦線は整数の座標値を取るので、 この2つの値が整数を囲むとき「交差」は起こります。

マッチ棒の両端は同等なので、左側を x としてもかまいません。 この場合 θ は右側を指す角度であって、-90 から 90 の範囲です。 (ラジアンを使うこともできましたが、 @c{$\pi$} pi を推定するときに @c{$\pi/2$} pi/2 ラジアンを参照したら、カンニングしたような気がするでしょう!)

縦線の平面は無限に広いので、マッチ棒の左端の両側の縦線に座標 0 と 1 を 選ぶことができます。 マッチ棒が縦線と交差しなければ右端は 0 と 1 の間にあり、 交差していれば 1 と 2 の間にあります。 従って、任意の x と @c{$\theta$} θ を選び、@c{$x + \cos \theta$} x + cos(θ) を計算して、 結果のいくつが 1 を越えるか数えれば良いのです。簡単でしょ!

v .t . コマンドを使うと、ちょっと速く実行できます。

1:  [0.52, 0.71, ..., 0.72]    2:  [0.52, 0.71, ..., 0.72]
    .                          1:  [78.4, 64.5, ..., -42.9]
                                   .

v . t . 1. v b 100 RET  V M k r    180. v b 100 RET  V M k r  90 -

(次の段階は、コンピューターのスピードによっては少し遅いかもしれません。)

2:  [0.52, 0.71, ..., 0.72]    1:  [0.72, 1.14, ..., 1.45]
1:  [0.20, 0.43, ..., 0.73]        .
    .

    m d  V M C                     +

1:  [0, 1, ..., 1]       1:  0.64            1:  3.125
    .                        .                   .

    1 V M a >                V R + 100 /         2 TAB /

第3の方法も試してみましょう。100万までの乱数整数を使います。 k r コマンドに整数引数をつけると乱数整数をひとつ発生します。

2:  [1000000, 1000000, ..., 1000000]   2:  [78489, 527587, ..., 814975]
1:  [1000000, 1000000, ..., 1000000]   1:  [324014, 358783, ..., 955450]
    .                                      .

    1000000 v b 100 RET RET                V M k r  TAB  V M k r

1:  [1, 1, ..., 25]      1:  [1, 1, ..., 0]     1:  0.56
    .                        .                      .

    V M k g                  1 V M a =              V R + 100 /

1:  10.714        1:  3.273
    .                 .

    6 TAB /           Q

GCD 関数のこの性質の証明は、Knuth のArt of Computer Programming, 第2巻, 4.5.2節の練習問題 10 を参照してください。

先ほど v .t . をタイプしたのなら、 もう一度それらをタイプしてフルサイズ表示に戻してください。


Go to the first, previous, next, last section, table of contents.     利用度数