November 26, 2007

J.-M. Muller, "Elementary Functions -- Algorithms and Implementation --" 2nd ed., Birkhauser

t[ Amazon ] ISBN 978-0-8176-4372-0, ¥7930

elementary_functions_1st_and_2nd_ed.png
(向かって左の紺の表紙が第二版,隣の緑の表紙が第一版)

 以前,初等関数の近似多項式についての論文を査読した時,著者の方に基礎文献として紹介したのが本書である。以来,折に触れて本書の第一版(緑の表紙)をつらつら眺めていたのだが,昨年,少し書き足しを施した第二版が出たので,この際,第一版の前書きの日本語訳をここに載せて,本書の紹介と代えることにした。類書は幾つか出ているし,日本でも浜田のものがあるが,最新の情報を網羅したものとしてはこれに勝るものはない。
 つーことで,

どこかで日本語訳を出版させてくれません?

と言っておこう。専門書だから10万部も売れる本には絶対になり得ないが,一万部程度は堅いんじゃないか(と言っておくテスト)。半年あれば下訳は完成させ,一年あればチェックも含めて完璧なものをお出し出来ると思いますぜ,旦那。

------------------------------------------------------------------
 基本関数([訳注] "Elementary Functions"は「初等関数」と訳すのが普通だが,「簡単な」という意味と解釈される恐れがあるので,本書では「基本関数」と訳すことにした。)(三角関数,指数関数,対数関数等々・・・)は,数学において頻繁に使用される関数群であり,これらを正確かつ高速に計算することは,コンピュータ計算研究において,一つの主要な目標となっている。本書の目的はこれらの基本関数の計算と(ソフトウェア及びハードウェア指向の)アルゴリズムの理解に必要となる理論的背景を解説するとともに,正確な浮動小数点数を得るための関連知識も述べることであり,特定の関数や浮動小数点演算システムにしか適用出来ない「料理レシピ」を与えることではない。あくまで,読者のあなた方が,自分の計算機システムにアルゴリズムを実装し適応させることが出来るような知識を与えようとしているのである。
 本書を執筆するに際して,私は二種類の読者を想定した。一人は,これから(ソフトウェアもしくはハードウェアのパーツとして)浮動小数点演算システムを作ろうとしている,あるいはそのアルゴリズムを研究しようとしている専門家(specialists)である。もう一人は,現在のコンピュータや電卓の内部において,基本関数の計算にはどのような手法が使用されているのかを知りたいと思っている趣味人(inquiring minds)である。従って,コンピュータ科学や応用数学を専攻する上級学部生・大学院生のみならず,浮動小数点演算システムを実装するためのアルゴリズム,プログラム,ハードウェア回路を設計する専門家にも,自分たちの関連分野に役立てようとしているエンジニアや自然科学研究者にも,本書は等しく役立つものとなっている。本書の内容は,コンピュータ科学や数学の基礎知識があれば大概理解出来るものであるが,そこで必要となるコンピュータ演算の基本記号については第一章に目を通して思い出して頂きたい。
 本書にどのような内容が記述されているかはこの第一章に書いてある。基本記号について記述されたこの章の以降の内容は。大きく三つに分類される。第一部は2章で構成されており,基本関数を多項式や有理(多項式)関数で近似するアルゴリズムを記述してるが,可能な限り,数表も掲載してある。第二部は3章で構成されており,「シフト加算(shift-and-add)」アルゴリズム,すなわち,シフト(shift)と加算だけから構成される,ハードウェア指向のアルゴリズムを解説している。最後の第三部は3章から構成されており,精度が重要視される際には有用な事柄について議論している。
 本書と同じ基本関数を扱った過去の労作(Hartらの``Computer Approximation",Cody \& Waiteの``Software Manual for Elementary Functions"など)には,多項式近似式や有理関数近似式の係数表が沢山掲載されているが,本書にはあまり載せていない。それは本の分量を減らすためであるが(シフト加算アルゴリズムを掲載しようとしたせいでもある),今ではこれらの係数の計算はMapleなどの数式処理システムを使って簡単に計算出来るようになっているからでもある。私の一番の目的は,基本関数がどのように計算され,どのように使うことが出来るのかを説明することなのだ。更に言えば,前述の歴史的労作は,ソフトウェアで実装することに焦点を当てた物であるが,今では基本関数の計算の多くは(少なくみても部分的には)ハードウェアに実装されるようになっており,この労作で述べられている物とは異なるアルゴリズム(CORDICに代表される,区間数表ベースのもの,シフト加算を用いているもの)が使われているのである。私はこういった幅広い手法の解説をしたいと念願していたのだ。また,数年前までは1, 2bitの誤差があってもさして問題視されていなかったが,今ではもっと高精度なものでなくてはならない事態となっている。精緻に丸められた(exactly rounded)関数値を与えること,即ち,常に真の関数値に最も近い浮動小数点数(machine number)を返す機能(少なくともある変数領域,ある関数については)が求められるようになっているのである。これについては単精度計算において達成している実装系が存在している。私はもっと高精度でもexactly roundedな関数値を得ることが出来るということを本書で言いたいのである。
 なお,参考文献で提示したBiBTeX データベース,本書で提示したMapleプログラム,正誤表については本書のWebページから取得することができるようにしてある。
-------------------------------------------------------------------

 つーことで,いい本なので推薦しておく次第である。

Posted by tkouya at November 26, 2007 3:00 AM