
2.2250738585072012e-308
в double. По идее, число должно быть преобразовано в 0x1p-1022
, то есть Double.MIN_VALUE
. Однако, Java зависает на 0x0.fffffffffffffp-1022
, самом большом денормализованном числе для double.Бесконечный цикл в runtime
class RuntimeHang {
public static void main(String[] args) {
System.out.println("Test:");
double d = Double.parseDouble("2.2250738585072012e-308");
System.out.println("Value: " + d);
}
}
Бесконечный цикл во время компиляции
(Если вы хотите опробовать это в Eclipse, не забудьте сначала всё сохранить, а то с его теневой компиляцией и опомниться не успеете — прим. перев.)
class CompilationHang {
public static void main(String[] args) {
double d = 2.2250738585072012e-308;
System.out.println("Value: " + d);
}
}
Под катом рассуждения автора насчёт причин этого явления.