最近巷で流行っているようなので、アレグザンダー・ステパノフ & ダニエル・ローズ の「その数式、プログラムできますか?」を買ってみました。(真面目に読んでないけど)
この本では、数学の歴史的記述と数論・代数の初歩とプログラミングが混じり合って出てくるので、最初の方は読みにくくだるかったのですが、途中から結構面白くなってきたように思いました。整数に対するユークリッドの最大公約数(GCD)アルゴリズムから出発して、そのアルゴリズムの適用できる対象を整数からどんどん広げて一般化してゆくのが面白かったです。(ユークリッド整域?)
基本ストーリー的には、西洋人がギリシア文明の末裔を僭称し、ギリシアをエジプト・メソポタミア・フェニキア文明より贔屓するいつものパターンで、カビの生えた古臭い見方の気もしました。しかも西洋文明から半分落ちかけているロシア人が書いているのも笑いのポイント。(そもそもギリシアの7賢人の最初はフェニキア人だし、自然哲学が生まれたのはペルシア帝国の領土内の植民市だし、プラトンがアイデアを盗んだのはフェニキア人勢力下のシチリアのピタゴラス教徒からなのに。孔子は自分の凡庸な息子を排除したけど、プラトンはアカデミアの後継者に自分の凡庸な甥を指名してアリストテレスをブチ切れさせて退職においやり、思想的にも反プラトン主義に走らせた縁故主義者だし。)
さて、ステパノフ式に計算機に数学の代数の形式論を応用する話では、演算の結合則が仮定されるのが普通ですが、浮動小数点数では演算の結合則が成り立たないことに触れていないのが気になります。
Fortranの数値計算の本なんかではかなりの章を割いて、実数の代数では等価な式だが、浮動小数点数の代数では異なる結果を与える表式間で、より実数の代数に近い結果を与える表式の選択法を学習します。(桁落ちを避けるとか)結局これは、結合則の成り立たない浮動小数点数の代数で、実数の代数を近似する方法の勉強と言えると思います。
数学では、結合則が成り立つ代数を考えるのが普通だし、結合則が成り立たないと一般性に欠けて面白くないので、それしか扱わないのは理解できるのですが、それが適用できるのは整数とか文字列とか限定的な範囲だと明示しておくのが親切な気がします。
関数型言語で有り金全部溶かす人の顔 レッツ・ビギン F x !
ラカーの学生だったステインの拡張したGCDアルゴリズムが出てきましたが、昔見た1950年代のラカーの論文でイスラエルの独自電子計算機を使ってアセンブラでラカー係数の計算していたのがありまして、根性あるなーと思ったけど、こんなところでまた顔を出すとはw ( 手元にないけどたぶん Bulletin of the Research Council of Israel. Section F, vol.8, 1 (1959). だったと思います。)