May 5, 2010

[3/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

 ・・・就寝前の寝ぼけ眼でアップした前書き部分を今読み返していたら,気になる箇所がぼろぼろ出てきた。な~んか非常にみっともないなぁと思いつつ,上げちゃったからしゃーないか,という境地に約1分を要してたどり着いた。つーことで,過ぎ去った過去のことはきれいさっぱり忘れることにして,以下では本書の内容について,ざっと目を通してみた感想を書き付けることにする。

 前書きにも書いてあるように,本書は現在の浮動小数点演算(Floating-point arithmetic, 以下FP演算と略記)の有り様を本文528ページというコンパクトなハンドブックの形でまとめたものである。その内容は次の6部に分割されている。

第一部 浮動小数点事始め,基礎定義,技術標準
第二部 浮動小数点演算の賢い使い方
第三部 浮動小数点計算の実装
第四部 初等関数
第五部 浮動小数点演算の拡張
第六部 結論と今後の展望

 9人の共著とは言え,FP演算や初等関数近似の数学的理論からソフトウェア環境のことまで,よくもまぁこれだけ射程の広い内容を一冊の本にまとめてしまったものだと感心する他ない。当分の間,ワシはFP演算の細かいことを質問されたら本書を紐解いて「Muller本の~ページにこう書いてあるぜ」とエラそーに能書きをたれることにしようと思っている程である。とはいえ,ざっと眺めてみると,ざくざくと山道を造ってくれた偉人達に,「あ,その道ちょっと曲がってますよ」とか「まだこのあたりに草が残ってますよ」的なチマチマした文句を言いたくなってしまった。以下,惰弱な追随者が,この6部の内容について紹介ついでにちみっとブーたれることにする。もちろん屈強な山男達に「細かいこと言ってんじゃねーよ」とタコ殴りされることは覚悟の上だ(ドキドキドキ)。

 第一部は浮動小数点演算の歴史(第1章)から入り(つーても細かいことはKnuth本を参照せよとなっている),第2章で丸め・誤差・FMA演算・区間演算を定義し,第3章でIEEE754-1985とIEEE854をくっつけて新たに制定されたIEEE754-2008規格の解説・FPA演算環境チェックツール(MACHARとかparanoiaなど)の説明を行っている。他の部は必要があるところだけ参照する程度でも,ここは一通り目を通しておいた方が良い。特に精度保証(この用語も誤解を招きやすいので何とかして下さい>九大・早大グループの方々)を志そうという物好きな人には丸め誤差について,やたら細かいけど必須の事柄を解説しているので必読である。ULP(unit in the last place)に2種類の定義あるって初めて知ったワイ。

 第二部ではFP演算を活用した計算アルゴリズムの紹介をしている。解説だけでなく,打ち込めばそのまま実行できるソースコード付きなので,FP数(Floating-point Number)を繋げて4倍,8倍・・・精度演算をしようという人,精度保証付き(って言い方好きじゃないんだけど)線型計算をしたい人にとっては必読。オタク的なFP演算求道者じゃないソフトウェア屋さんでも,今のFortran, C, C++, JavaでどのようにFP演算が扱われているかを知るために第7章をざっと眺めておくのは良いことなんじゃないかな~。

 第三部では基本的なFP演算の実装方法を解説している。まず第8章で四則演算,平方根,FMA演算の,IEEE754-2008規格に基づいた実装方法を解説している。第9章ではハードウェアを用いたデジタル回路での実装について,第10章ではソフトウェアとして実装するための解説とソースコード例が示されている。現在これだけIEEE754-1985規格を搭載したFP演算Unit搭載CPUが普及してしまうと,既存のCPUメーカー,Intel, AMD, SUN, IBMが高速かつ精度拡張したFP演算を実装して高速化してくれる,なんてことはこの先あまり期待できない。明確な応用目的を持った個々の研究グループ・企業が独自に開発を担わねばならないとなれば,この第三部の解説は彼らに対して重要な知的基盤を提供してくれるだろう。

 第四部では初等関数の近似手法についての解説だが,唯一,この部分はあまり感心しなかった。ことに第12章で数表作成者のジレンマ(Table-Maker's Dilemma, 以下TMDと略記)の議論に一章費やしているのはともかく,Mullerの前作をコンパクトにした内容を期待してたら,そこが全部すっ飛んじゃったという感じである。初等関数近似手法としてRemez法の説明が第11章でなされている以外,あまり有用な情報はない。オタク的な興味のある人以外は,関数近似手法を知りたいならMullerの前作を入手することをお勧めしておく。・・・ホント,このフランスグループってのはTMDが好きだよねぇ~。ま,Lefevreさんの趣味なんだろうけどさぁ~。

 第五部は完全にこの方面の研究者向けという内容・・・かな? 第13章では精度保証(ホントにこの用語何とかした方がいい)を拡張して形式的証明問題に応用しようというお話くさい。カレントテーマってことは知ってるけど,ワシは興味ナッシングなので詳しい人に解説は任せた。でもGappaってのはちょっと興味が沸いたかな? 第14章は多倍長計算のお話。第二部第4章のアルゴリズムの解説を受けて,既存の倍精度FP数を並べて4倍,6倍(倍精度の3倍の精度の意味ね)計算のアルゴリズムを説明している・・・けど,GMPのように整数演算ベースの多倍長計算のお話はあまりない。多倍長整数演算の高速化アルゴリズムの解説を知りたければGMPとかMPIRのマニュアル(PDF)を参照して欲しい。ちなみに,P.511でARPRECも"Large Precision Relying on Processor Integers"で語られているけど,少なくともmp_realはdouble型の拡張だったはず・・・ちょっと誤解を招きそうだ。

 第六部はざっとしたまとめと今後の展望と付録。しかし・・・IEEE754-2008規格が今後実装されていくという方向は認めるとして,その歩みが速いかどうかは疑問である。後述するFMA演算実装状況を考えると,著者らの認識はちと楽観的すぎるような気がする。 

 ・・・とまぁ,かなり大雑把に本書の内容の「印象」をまとめてみた。ワシの持っている本書は,第13章に第12章の最後がくっついた第五部が重複して掲載されているという乱暴な代物だし(「落丁」じゃないから文句を言う筋合いではないけど),一部「言い過ぎ」「言い足らな過ぎ」って箇所もあるので,どーも,本書をFP演算の「聖典」と言い切るには至らない。しかし,それもこれもこのMullerを中心とするフランスグループの力強さの現れと思えば,本書は彼らの力業による「力作」であることは間違いない。13000円の価格は確かに高いけど,この分野に興味があってそこでおまんまを食っている人間がその経済力の一部を振り向けて彼らに喜捨するのだと思えば,お安いものではないだろうか?

 では乱暴さの一部をここでご紹介して,中締めとしよう。

section_12_5_in_chapter13.JPG

mutiple_part_vs.jpg

 最後に,FMA演算の現状についての小文を掲載しておく。→[4/4]へつづく

Posted by tkouya at May 5, 2010 9:51 AM