時々帖

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

πの歴史

πの歴史 (ちくま学芸文庫)πの歴史 (ちくま学芸文庫)
(2006/04)
ペートル ベックマン

商品詳細を見る


πを切り口にして,数学の歴史を見ていく本.
数式をなるべく出さないようにする本が多い中,数式もばんばんだしてくる.
証明は結構はしょってるからわからない部分も多いけど,興味深い話が次々とでてくる.

定規とコンパスによる作図が2次方程式をつぎつぎに解いていくことに帰着できる(だからπは定規とコンパスによっては描けない)とか,確率を調べることでπを求めることができる(ビュフォンの針)とか.

実際に試してみたくなったのでPerlでちょっと書いてみた(本にはBASICで書かれたプログラムが載っていた).
ビュフォンの針とは簡単に言うと,針より幅がひろい線分の間に針を落とす試行を繰り返すと,針が線分を交わった回数と試行回数からπが求まるというもの(詳しくはここ).
これをプログラムに繰り返させてみると,実行結果はこんな感じ.
実際のπの値は3.141592653....だから1000万回の試行でも下3桁までしかあってないけどこんなもんか.
これで実行時間は6秒.

 % ./calc-pi-odds.pl 10000000
1000000: 3.14218381775334
2000000: 3.14295165590337
3000000: 3.14264793229479
4000000: 3.14335177171093
5000000: 3.14242178276501
6000000: 3.14205629255686
7000000: 3.14221555374255
8000000: 3.1422782342046
9000000: 3.14162936418134
10000000: 3.1414997456956

**** result ****
trial number : 10000000
calculateed PI: 3.1414997456956
elapsed time : 6.138486
****************


このプログラムでは簡単のために線分間の距離と針の長さは等しいとしてしまっている.

#!/usr/bin/perl

use strict;
use warnings;
use Time::HiRes qw/gettimeofday tv_interval/;

sub calc_pi {
my($trial, $touch) = @_;
if ($touch == 0) { return 0 }
return 2.0*$trial/$touch;
}

my $trial_num = $ARGV[0] || 1000000;
my $mid_num = $trial_num / 10;
my $pi = 3.141592653589793;

my $touch_num = 0;
my $calc_pi = 0;

srand(time);
my $start_time = [gettimeofday];

for my $i (1..$trial_num) {
my ($distance, $angle) = (rand, $pi*rand);
if ($distance < sin($angle)) { $touch_num++ }
if ($i % $mid_num == 0) {
print "$i:\t" . calc_pi($i, $touch_num) . "\n";
}
}

my $elapsed_time = tv_interval($start_time, [gettimeofday]);

print "\n**** result ****\n";
print "trial number : $trial_num\n";
print "calculateed PI: ". calc_pi($trial_num, $touch_num) . "\n";
print "elapsed time : " . $elapsed_time . "\n";
print "****************\n";


Perlでミリ秒をとるのってどうやってやるのかって調べたらこんなモジュールがあるのね(Time::HiRes).
スポンサーサイト

テーマ:読んだ本。 - ジャンル:本・雑誌

  1. 2007/11/25(日) 17:41:24|
  2. 読書
  3. | トラックバック:0
  4. | コメント:0
<<google-code-prettifyを入れてみた | ホーム | Bookoff原宿店が....>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://namikister.blog101.fc2.com/tb.php/7-6e3c1100
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。