2010-05-08

フェルミ推定の元ネタ

フェルミ推定という言葉は聞いたことがある人が多いと思います。
おおざっぱな情報から, 何かの数字をそれなりの精度(普通は有効数字1ケタ以下)で見積もるというものです。「シカゴに調律師は何人いるか?」とか, 「富士山を移動するにはどうすればよいか? (あるいは, 何台のトラックが必要か)?」という問題は有名ですね。MicrosoftやGoogleが採用試験に使ったという話も聞きます。

Wikipediaの説明ではこうなっています。
実際に調査するのが難しいようなとらえどころのない量を、いくつかの手掛かりを元に論理的に推論し、短時間で概算すること。
この推定方法の語源は, 有名な物理学者エンリコ・フェルミがそのような推定が得意だった(あるいは多用した)からと言われてますが, その中でも 「トリニティ原爆実験ので, 空中に紙切れを投げ, 落下する紙片が爆発の衝撃波で吹き跳ばされた距離から, 爆発の規模をかなり正確に見積もった」というエピソードが有名(らしい)です。

その話を聞いて, 具体的にフェルミは爆発の規模を一体どういう計算で見積ったのか興味が湧いたので調べてみました。すると, 計算方法そのものは見付けられなかったものの, その時のエピソードを示すフェルミ自身の文章を見付けました。

これが非常に興味深いので, 下に翻訳して載せてみます。
Webをざっと検索した限りだと, 翻訳した人はまだいないようなので, (少なくともWebでは) 日本初公開!? どうでもいいことだけど。
ちなみに, 結局フェルミが実際にやった方法はわかりませんでした...。
フェルミが実際にやった推定方法を見付けた! とか, 物理に詳しくて, フェルミがやった推定方法の検討がつく方, ぜひ教えて下さい!!




1945年7月16日のトリニティ実験での爆発についての私の観察
E. フェルミ


7月16日の朝、私は爆発地点から10マイルほどのベースキャンプにいた。
爆破の時刻は午前5時半だった。 私は溶接用の黒いガラスのはまった大きな板で顔を保護していた。爆発の最初の印象は, とても強烈な閃光と, 体の露出していた部分に感じた熱だった。直接は爆発の方向を見たりしなかったが, 田舎が突然に真昼よりも明るくなったという印象だった。
その後爆発の方向へ, 黒いガラス越しに目をやると, すぐに炎の塊のようなものが上昇し始めているように見えた。数秒して炎が輝きを失うと, 巨大なきのこのような頭の煙の柱がせり上がって, すぐに雲を越えた。
煙は一番高いところまで到達すると, 風に散らされるまでしばらくそのままだった。


爆発からおよそ40秒後, 衝撃波が到達した。 私は, 衝撃波の通過前,通過中,そして通過後に6フィートの高さから小さな紙片を落してその強度を見積もろうとした。その時は無風状態だったので, 衝撃波が通過中に落下していた紙片がどれくらいの距離変位するかをはっきりと測定できた。移動距離は約 2.5 メートルで, 私はその時これはTNT火薬10キロトン相当の爆発による衝撃波だと見積もった。



ちなみにフェルミの推定では爆発の規模は約10キロトンで, 正確な値は18.9キロトンだったらしいです。
しかしなぜ高さがフィートで距離がメートルなんだ??

2010-05-06

mighttpdはbusyboxのhttpdの1/5のコード量

Haskell で掛れた mighttpd という httpd がある。
CGIもサポートして, なんと536行!
なんと, 今 mew.org はこの mighttpd で運用されてるらしいです。
$ wc -l mighttpd/*.hs
114 mighttpd/Config.hs
90 mighttpd/File.hs
86 mighttpd/LogMsg.hs
84 mighttpd/Mighttpd.hs
2 mighttpd/Setup.hs
65 mighttpd/URLMap.hs
95 mighttpd/mkindex.hs
536 total
一方 組み込みでfootprintの小ささに定評のある busyboxでの実装は 2935 行
$ wc -l busybox/networking/httpd*.c
2421 busybox/networking/httpd.c
344 busybox/networking/httpd_indexcgi.c
170 busybox/networking/httpd_ssi.c
2935 total
機能を厳密に比べたわけじゃないから単純に比較できないけれど busybox の実装と比べて実に 1/5 以下のコード量。
Haskell すごいなぁ!

mighttpd については, 作者の山本さんが去る4/16に Haskellers Meeting 2010 Spring で発表された時のスライド(pdf)が公開されてます。