(2002年頃書いた 「区間演算用ソフトウェア BIAS/Profil の紹介」 のイントロの引き写し)
精度保証付き数値計算を行なうには、 丸めの制御 (切り捨て、切り上げ、 「四捨五入」=最も近い浮動小数点数への丸め10) を 伴う浮動小数点演算やそれを用いた区間演算が必要になる。
大型機では IBM の ACRITH (High-Accuracy Arithmetic Subroutine Library) という先駆的ソフトウェアがあった。
現在のパソコン、ワークステーションにおける浮動小数点演算は、 ほぼ例外なく、 IEEE754-198511(2018年現在は IEEE754-2008 に更新されている) という規格に準じたものとなっているが、 その規格には丸めの制御が組み込まれている。 この規格の制定には、数学者である William Kahan (http://www.cs.berkeley.edu/~wkahan/-- この WWW ページには興味深い文書が満載されている) が 大きな役割を果した。
丸めの制御はいわゆる低レベルなプログラミングであるが、 アセンブリー言語でプログラムを書かなくても、 C 等のプログラミング言語で、 ごく短いインライン・アセンブラー命令を使うだけで実現できる (大石 [39], 裳華房1999)。 MATLAB とそのクローン達においても、 ちょっとした工夫で丸めの制御が実現できる (大石 [52], コロナ社)。
区間演算を行なうには、 従来は独自の拡張言語を作成する試みもあったが、 最近では C++ の演算子多重定義などを用いたライブラリィが利用できるように なっている。 桂田研には、 Olaf Knüppel の BIAS/Profil12 を利用した経験 13がある。
Intel CPU における丸め制御 |
Pentium ファミリーなどの Intel CPU には、
contorl word というレジスターがあり、
そのビットを適当に設定することで浮動小数点演算の丸めモードを指定できる
14。
|
桂田 祐史