前の質問 質問一覧 次の質問

8. 浮動小数点演算

5章の復習の最後にある 「for 文の演習」を double で計算するプログラムを作成し、 データに 1.0E12 を与えると無限ループが発生する。
1000000 などはすぐ答が表示される。
Windows の「管理ツール」の「パーフォーマンス」でみると CPU 100% で実行している。

【原因】

浮動小数点演算(加算)の時間を計ってみました。 Dell XPS(Pentium4 3.0GHz)、Java 1.4.2 での実行結果です。

変換が発生しないように全て double で計算しています。 プログラム DoubelTime.java

実行結果

DoubleTime-1.gif

浮動小数点数の加算1回につき、1ナノ秒かかっていることがわかります。
1.0E9 回で1秒、1.0E12 回で1000秒(16分)かかることが予想されます。 前後のループの制御処理を加えると1時間程度はかかる計算と思われます。
Double の有効数字は16桁程度あり、 a については誤差はなく、 s についてはデータが1.0E9を超えたあたりから誤差が含まれているようにみえます。
a の誤差で +1.0 しても値が増えないという状態になっているわけではありません。

上記画面は実行開始後5時間たったものです。まだ実行中です。


Top Page
更新日:2006-06-17