5章の復習の最後にある
「for 文の演習」を double で計算するプログラムを作成し、
データに 1.0E12 を与えると無限ループが発生する。
1000000 などはすぐ答が表示される。
Windows の「管理ツール」の「パーフォーマンス」でみると CPU 100% で実行している。
【原因】
浮動小数点演算(加算)の時間を計ってみました。 Dell XPS(Pentium4 3.0GHz)、Java 1.4.2 での実行結果です。
変換が発生しないように全て double で計算しています。 プログラム DoubelTime.java
実行結果
浮動小数点数の加算1回につき、1ナノ秒かかっていることがわかります。
1.0E9 回で1秒、1.0E12 回で1000秒(16分)かかることが予想されます。
前後のループの制御処理を加えると1時間程度はかかる計算と思われます。
Double の有効数字は16桁程度あり、
a については誤差はなく、
s についてはデータが1.0E9を超えたあたりから誤差が含まれているようにみえます。
a の誤差で +1.0 しても値が増えないという状態になっているわけではありません。
上記画面は実行開始後5時間たったものです。まだ実行中です。