May 5, 2010

[2/4] J-.M.Muller et.al, "Handbook of Floating-point Arithmetic", Birkhauser

[ Amazon ] ISBN 978-0-8176-4704-9, \13666(2010年4月現在)

handbook_of_floating_point_arithmetic.jpg

 上記,"Handbook of Floating-point Arithmetic"の前書き部分を翻訳したので以下に提示する。

------- ここから --------
初めに

 浮動小数点演算(Floating-point arithmetic)は,現代のコンピュータ上で数値計算を行うために,実数演算を近似する手法として,最も広範囲で利用されているものである。浮動小数点演算をざっくり述べるには短い言葉で十分だ。即ち,ある数xは,基数(radix)βの浮動小数点演算において,符号部(sign)s,有効小数部(significand)m,指数部(exponent)eを用いて,x = s×m×β^eと表現される。とはいえ,この演算を実装し,高速で可搬性のあるものにしようとすると,大変面倒な仕事をする羽目になる。少し拡大解釈すれば,浮動小数点演算という概念は(60進法ではあるが)古代バビロニアで発明されたとも,計算尺を使った計算にもその萌芽があるとも言われているが,最初の現代流の実装はコンラッド・ツーゼ(Konrad Zuse)が開発した5.33Hz駆動のZ3コンピュータ上でなされたものである。

 多種多様な浮動小数点演算の実装が大量に登場したのは1960年代から1980年代初期の頃である。その当時は基数も(2, 4, 16, 10が想定されていた),小数部の桁数も,指数部の長さも標準化されていなかった。丸め方式やアンダーフロー,オーバーフロー,やってはいけない計算(5/0や\sqrt{-3}など)の扱いも,コンピュータ間の互換性は殆どないに等しい状態。標準的な実装が存在しないことが,数値計算ソフトウェアの信頼性や可搬性を向上させることを困難にしていたのだ。

 プログラマには有用であり,浮動小数点演算の実装者にとっては現実的な解決をもたらす,核となるコンセプトをもたらしたパイオニアは,ブレント(Brent),コーディ(Cody),カーハン(Kahan),九鬼(Kuki)といった科学者たちである。彼らの努力によって,2進ベースの浮動小数点演算であるIEEE754-1985規格ができあがったのだ。その後,IEEE854-1987という「基数に依存しない浮動小数点演算規格」もできた。この規格化を指揮したのはカーハン(William Kahan)で,プログラマが利用できる計算環境の質が向上したのは,このIEEE754-1985規格のおかげなのである。近年ではさらにこの規格が改良され,新しいバージョンであるIEEE 754-2008規格が2008年8月にリリースされている。

 このIEEE754-1985規格が浮動小数点演算の挙動を思慮深く規定しているおかげで,研究者が非常にスマートで可搬性のあるアルゴリズムをデザインすることができるようになっているのだ。例えば,非常に精度の高い和の計算や積和計算が実行できるし,プログラムの重要な部分を形式的に証明できたりするのである。ただ不幸なことに,あまり知識のないユーザにはこの規格の精緻なところが殆ど理解されていない。更に憂慮すべきは,こういう部分がコンパイラの制作者にもしばしば見落とされていることだ。結果として,浮動小数点演算が曲解されることもしょっちゅうで,その性能を十分発揮し得ていないことも起きてしまう。

 このIEEE754規格,そしてその改良版の存在が,浮動小数点演算に関する膨大な知識の中から一部を抜粋して本を編むという決断を我々にさせたのだ。本書は数値アプリケーションのプログラマ,コンパイラ制作者,浮動小数点アルゴリズムのプログラマ,演算回路の設計者,そして浮動小数点演算を操るツールをもっと正確に理解したいと願っている学生や研究者にも役立つように構成されている。本書の執筆中,我々は,コーディングや設計のためにより直接役立つ使い方を示せるよう,記述したテクニックを実際のプログラムを使って説明するよう,できうる限り心がけたつもりだ。

 本書の第一部では,浮動小数点演算の歴史と基礎概念(フォーマット,例外処理,正確な丸め等),そしてIEEE754, 854規格とその改良版の規格について様々な事柄を述べている。第二部ではこの浮動小数点演算規格の持つ性質がどのようにして,スマートだが分かりづらいアルゴリズムを開発するのに役立っているのかを解説する。加算,除算,FMA(fused mutiply-add)演算を用いた平方根のアルゴリズムも説明する。そして第三部では,浮動小数点演算が,(整数計算プロセッサ上の)ソフトウェアと(VLSIもしくはリコンフ回路といった)ハードウェアを使ってどのように実装されているのかを説明する。第四部では初等関数の実装方法を述べ,第五部では浮動小数点演算の精度保証や多倍長精度化といった,浮動小数点演算の拡張方法をご覧頂く。最後の第六部は全体のまとめ・今後の展望(perspective)と付録に充てた。

謝辞
 本書の準備段階の原稿の作成に当たっては,世界中に散る同僚と,上級エコール・ノルマル・リヨン校(Ecole Normale Superieure de Lyon)とリヨン大学(Universite de Lyon)の学生たちに読んでもらい助力を請うた。ニコラス・ボニファス(Nicolas Bonifas),ピエール-イヴス(Pierre-Yves)・デイビッド(David),ジーン-イヴス・レクセレント(Jean-Yves l'Exellent),ワレン・フェルガソン(Warren Ferguson),ジョン・ハリソン(Jon Harrison),ニコラス・ハイアム(Nicholas Higham),ニコラス・ルーヴェット(Nicolas Louvet),ピーター・マークステイン(Peter Markstein),エイドリアン・パンハルー(Adrien Panhaluex),ギラーム・レヴィ(Guillaume Revy),そしてジークフリード・ルンプ(Siegfried Rump)。彼らの助言と好奇心に感謝する。

 出版元であるバーカウザー(Birkhauser)・ボストンとの共同作業は非常に楽しかった。特に,トム・グラッソ(Tom Grasso),レジーナ・ゴレンシュテイン(Regina Gorenshteyn),そしてトリー・アダムス(Torrey Adams)の協力に感謝したい。

 ジーン-ミッチェル・ミュラー(Jean-Michel Muller),ニコラス・ブリスベア(Nicolas Brisebarre),フローレン・ド・ディネティン(Florent de Dinechin),クロード-ピエール・ジーネロッド(Claude-Pierre Jeannerod),ヴィンセント・ルヴェブレ(Vincent Lefevre),ギラーム・メルクウィオン(Guillaume Melquiond),ナタリー・レヴォル(Nathalie Revol),ダミアン・ステーレ(Damien Stehle),サージ・トレス(Serge Torres)

フランス,リヨンにて
2009年7月
------- ここまで --------

 ・・・いかがでしょう? つーことで,ざっと本書を眺めてみた感想を次に述べてみたい。→[3/4]につづく

Posted by tkouya at May 5, 2010 1:37 AM