パスワードを忘れた? アカウント作成
452627 journal

SS1の日記: books: 新しい「安定」計算術

日記 by SS1

タレコミ済み・・・・

紹介

『コンピュータのカオスをおさえる』

この本のタイトルから「カオスを創る」話を連想すると,肩すかしを食らうかもしれない。シリーズ名にある「コミュニケーション サイエンス」という言葉から受ける人文科学的なイメージも,やはり誤解のもとだ。この本は,コンピュータ計算で表われる「カオスをおさえる」ための,著者自らが発見した数式処理の技法である「安定化理論」を紹介する。

この,水色の装丁の美しいブックレットは,NTTコミュニケーション科学基礎研究所が設立10年目に,その成果を一般にわかりやすく紹介するための新しいシリーズとして提案され。そして,記念すべき新シリーズの創刊第一号として出版された。

この本では,高校生でも理解できるよう平易な例を使いながら,その「安定化」の手法を解説する。あなたが高校生でもアルゴリズムや計算機科学に興味があれば,読み通すことができるだろう。もし,あなたが数値シミュレーションをざくざくこなすエンジニアなら,ぜひ一読して欲しい。きっと役に立つことがある。

書誌情報:

コンピュータのカオスをおさえる -- 新しい「安定」計算術
白柳 潔 著,NTTコミュニケーション科学基礎研究所 監修,
NTT出版,2003年10月10日 発行,定価1200円+税,
91ページ,新書版,ISBN 4-7571-0111-2
お勧め度:☆☆☆☆★
bk1amazonesbooks

割り切れない問題

入力を浮動小数点表現で近似すると,入力の値によっては(割り切れるか?)判定に失敗することがある。それによって正しい演算結果をえられない場合もある。

たとえば,次の代入式:
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

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...