C..1 PC, WS における精度保証付き数値計算

(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
(1)
切り捨て ($ -\infty$ に向かっての丸め)
(2)
切り上げ ($ +\infty$ に向かっての丸め)
(3)
最近点への丸め (rounding to the nearest even15)
そのための命令は fldcw (load control word) である。

桂田 祐史
2020-09-03