Knowledge‎ > ‎

Java - 倍精度浮動小数点の処理でハングアップ

Javaの致命的なバグで、特定の小数点数を処理しようとすると内部で無限ループが発生しハングアップするという問題です。

2011年2月くらいに話が広まり、いろいろなところでパッチ適用の対応に追われた事と思います。元々はPHPで発覚した問題だっのですが実はJavaでも同じ問題があったという話です。ロジックをパクって移植していたのでしょうか?

自分でも試してみましたが、簡単に再現できました。以下のソースを実行すると「Start.」は表示されますが、その後何も表示されず、処理は終わらずCPU使用率が上昇します。そしてパッチ適用ですぐに解消しました。怖いですね…。

public class InfiniteLoopTest {
	public static void main(String[] args) {
		System.out.println("Start.");
		double d = Double.parseDouble("2.2250738585072012e-308");
		System.out.println("Value: " + d);
		System.out.println("End.");
	}
}


Oracle社の説明とパッチ。