トップ «前の日記(2015-08-21) 最新 次の日記(2015-08-24)» 編集

日々の破片

著作一覧

2015-08-22

_ アルゴリズムのバイブル 準数値演算

アスキーというかドワンゴの鈴木さんからThe Art of Computer Programmingの2分冊目を結構前にいただいたのは良いが内容が内容だけにずっと玄関に放っておいて先日やっと重い腰を上げて開けた。

というわけで買うべき本ではあるのだが、せっかくもらったのに大喜びで封を切って読みはじめたわけでもない僕がいきなり買えというのは道理が通らない。

もちろん、このシリーズを買うことは技術書の未来への投資という大事な側面があるから、そういう志がある人は黙っていても買うだろう。

でも、そうでない人にとって、本書の購入価値についての検討材料は書くべきだと思う。

この巻は副題がSeminumerical Algorithms(日本語版だと帯みたいに見える表紙の緑の部分に「準数値演算」と書いてある)で、原書3版に相当する。

ドワンゴ再版シリーズなので、以前アスキーから出た時と同内容だが、出版後見つかったタイポ、誤植、誤訳などは修正されている(多分、鈴木さんの手元には読者から送られてきた膨大なバグ情報というかプルリクエストがあるのだろう。というか間違いなくあり、それらがパッチされているということだ)。したがって、以前購入した人は買い直す価値はある。

さて、僕が本書の封を切るまでの腰が重かったのは本が厚いってのもないわけではないが、内容が内容だからだ。

本書は2つの章からなっている(数表とか演習問題の解答(これだけで185ページもある)もある)。最初が第3章「乱数」、次が第4章「算術演算」だ。

ただ、以前眺めてそのまま書棚に返したときと違って、今、あらためて読んでみると純粋におもしろい。

以前本書をスルーしたのは、役に立たないと考えたからだ。

まず乱数ならば、rand()を呼べば良い。

基数変換は%dとか%xとか%oとかしてやれば良い。

算術演算にいたっては考える必要すらない(とは言え、1990年代には32ビット整数を16ビット整数で割るために256進法の関数を作る必要が出て来たことがあったけど)。

その状況は今ではむしろ大きくなっている。多項式の演算であればOctaveでもなんでも使えば済むし、64ビットの算術演算がネイティブで実行できるし、規格化された倍精度浮動小数点数演算は何も考えなくても使える。

したがって、おそらく純粋に本書が必要でしょうがない人がいるとしたら、きわめて低レベルなところでOSやコンパイラを作ろうとしている人くらいではなかろうか。

そもそも序に

「より高水準の」数値解析に携わる人々から見れば、この巻で扱う内容は、システムプログラマの領域である。「より高水準の」システムプログラミングに携わる人々から見れば、この巻で扱う内容は、数値解析学者の領域になる。

とある。その他の人びとにとっては、つまり単なる漬物石か? 多分そうだ。

でもそればかりでもない。演習問題についての注意にあるが

演習問題は本書の重要な構成要素になっている。教育効果が上がるように演習問題には工夫を凝らしてあり、ためになるばかりではなく、おもしろい問題を選ぶようにしている。

そして200ページ近い渾身の解答が用意されている。

ようするにこういうことだ。

バッハ:ゴルトベルク変奏曲/14のカノン(高橋悠治)

ゴルトベルク変奏曲は聴くのも弾くのも楽しい。

本書の適当なページを開き、本文を読み演習問題を考えてみる。M2xくらい(Mnxという形式で問題のレベルが示されている)の問題を解いてみる。もしかすると寝る前に考え続けてみるくらいかも知れない。M3xに挑戦してみたりしてみる。

そうやって末永く楽しめるのは間違いない。

The Art of Computer Programming Volume 2 Seminumerical Algorithms Third Edition 日本語版(Donald E.Knuth)

追記:達人出版会からPDF版も出ています


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え