数値計算は浮動小数点数を用いて行うのが現代では一般的である。これは,浮動小数点数がハードウエア的にサポートされ,例えば,有理数演算に比べて圧倒的に高速であるからである。
浮動小数点数の表現は,IBM方式など様々なものがあったが,1985年IEEE754が制定され,標準化された。現在のほとんどのCPUはIEEE754に従う,浮動小数点数が実装されている。IntelのPentiumもそうである。
今週はIEEE754について学ぶ。教科書[1]の第一章の内容である。
IEEE754とはどんなものか。IEEE754によって標準化されているのは2進の倍精度浮動小数点数である。
まず,規格を読んでおく必要がある。そのための資料としてIEEE754の企画書の日本語訳 及びIEEE Standard 754 Floating Point Numbersを挙げる。解説としては浮動小数点演算についても参考になる。また,当事者であるW. Kahanの解説 もある。 制定の歴史を語った文書もある (An Interview with the Old Man of Floating-Point)。
現在ではIntelのPentium CPUを含むほとんどのマシンがIEEE754に従っているが、どのようなCPUが例外かなどは Interval FAQの記録:What machines support IEEE754? が参考になる。
また、IEEE754にしたがってどのように浮動小数点演算が実装されているかの例は、例えば、 IntelのPentiumIIIのマニュアルなどを見るとよい。 与えれたCPUがIEEE754規格を満たしているかどうかをチェックするプログラムが存在する (TestFloat)。TestFloat1はソフトウエアでシミュレートされた浮動小数点システム SoftFoat と対象としているハードウエアの実行結果を比較して、違いが あるとバグの候補として出力するようなソフトウエアである。
また,Intel上のCでのIEEE754のdoubleの64bitを書き出すプログラム(print the bits of double real number)がある。
数値計算はFORTRANでの歴史が長く,また,コンパイラとしても現在でもFORTRANは頑張っているので,FORTRANでのコードが多い。またCも多く用いられている。Javaでの数値計算は現在評価が確定していない。まだ,これからである。
そこで,本講義ではC及びC++によるコーディングを標準とした。Cについては多くの参考webがある。幾つか示すと
などである。
©大石進一
このページのURIはhttp://www.oishi.info.waseda.ac.jp/~oishi/lec2001/float.htm
最終更新:2001/4/7