SS1の日記: books: 新しい「安定」計算術
タレコミ済み・・・・
紹介
『コンピュータのカオスをおさえる』
この本のタイトルから「カオスを創る」話を連想すると,肩すかしを食らうかもしれない。シリーズ名にある「コミュニケーション サイエンス」という言葉から受ける人文科学的なイメージも,やはり誤解のもとだ。この本は,コンピュータ計算で表われる「カオスをおさえる」ための,著者自らが発見した数式処理の技法である「安定化理論」を紹介する。
この,水色の装丁の美しいブックレットは,NTTコミュニケーション科学基礎研究所が設立10年目に,その成果を一般にわかりやすく紹介するための新しいシリーズとして提案され。そして,記念すべき新シリーズの創刊第一号として出版された。
この本では,高校生でも理解できるよう平易な例を使いながら,その「安定化」の手法を解説する。あなたが高校生でもアルゴリズムや計算機科学に興味があれば,読み通すことができるだろう。もし,あなたが数値シミュレーションをざくざくこなすエンジニアなら,ぜひ一読して欲しい。きっと役に立つことがある。
書誌情報:
『コンピュータのカオスをおさえる -- 新しい「安定」計算術』
白柳 潔 著,NTTコミュニケーション科学基礎研究所 監修,
NTT出版,2003年10月10日 発行,定価1200円+税,
91ページ,新書版,ISBN 4-7571-0111-2
お勧め度:☆☆☆☆★
bk1,amazon,esbooks
割り切れない問題
入力を浮動小数点表現で近似すると,入力の値によっては(割り切れるか?)判定に失敗することがある。それによって正しい演算結果をえられない場合もある。
たとえば,次の代入式:
b:=3a-1
この式で,bがゼロなら,割り切れたと判定する処理があるとしよう。
ここで入力が,a:=1/3 のとき,浮動小数点で表現すると,a=0.33333 となり,
3*(0.33333)=0.99999
b=0.00001
でbがゼロではないので,割り切れないと判定されてしまう【失敗】。
これは,有効桁数のある浮動小数点形式のもつ性質そのもので,その演算精度で定評のあるHP電卓でも,これをゼロにすることがない。そのため,しばしばネットでも議論になる。曰く,1/3を0.333…と表現するのが悪いという説,丸めてしまえばいいという説。それからデデキントが出てきて,やはり,すっきりしないままに終わる。
もしかすると,この議論に終止符を打つときがきたのかもしれない。本書が紹介する「安定化手法」による計算術は,こうした問題に正しい答えを出すことができる上に,その正しさも保証する。
「安定化手法」による計算
その手続きは次の3つのステップを守るだけでよい。
1.入力係数を区間で表現する。
1/3=[0.3332, 0.3334]
3=[3, 3]
2.区間演算で加減乗除する。
[3, 3]*[0.3332, 0.3334]=
[0.3332*3, 0.3334*3]=
[0.9996, 1.0002]
3.ゼロ書き換えのルール
区間がゼロを含めば,それをゼロに書き換えよ
[-0.0004, 0.0002]:=[0.9996, 1.0002]-1
区間にゼロが含まれるから,これは割り切れると判定できる【成功】。
このように「区間法は,近似値と誤差をまとめて操作して行く方法で,常に真の値をとり逃がさないように計算できます。」と説明したのち「安定化手法とはゼロ書き換えつきの区間法」と結論する。ここで,浮動小数点数の精度を上げていけば,必ず正しい結果が得られるという。数学的な正しさも,すでに検証済みのようだ。
コロンブスの卵
これほどシンプルで目からウロコな計算技法というのも珍しい。手元に四則演算子のオーバーライド可能なオブジェクト指向言語があれば,きっと区間表現のデータ型をインプリメントしてみたくなるだろう(もちろん,わたしが思ったのは一瞬だけだったけれど……)。 これだけドキドキさせてくれるコンピュータ サイエンスの基礎理論は本当に久しぶりだった。
この本の参考文献リストから:
『数理科学(特集 数式処理とその周辺)』1998年11月号,サイエンス社
『情報処理(特集 数式処理の最近の研究動向)』39巻2号,情報処理学会,1998
books: 新しい「安定」計算術 More ログイン