I wzrok wykonania Double.isFinite()
który istnieje od Java 8 (bo potrzebne funkcje w Java 7):Szczegóły implementacji Double.isFinite - dlaczego DoubleConsts.MAX_VALUE zamiast Double.MAX_VALUE?
public static boolean isFinite(double d) {
return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}
gdzie DoubleConsts.MAX_VALUE
jest double sun.misc.DoubleConsts.MAX_VALUE
wartością 1.7976931348623157E308
. To wydaje się być równoważne Double.MAX_VALUE
, który jest zdefiniowany jako:
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308
Dlaczego ta implementacja używać stałą z sun.misc
-package zamiast Double.MAX_VALUE
?
(Float.isFinite
wykorzystuje ten sam wzorzec)
dobry pytanie, zrozumiałbym, gdyby to zdefiniowało jako "publiczny statyczny ostateczny podwójny MAX_VALUE = DoubleConsts.MAX_VALUE"; aby wszystkie stałe były w jednym miejscu, ale to ... – Eugene
Co ciekawe, [ten link] (https://alvinalexander.com/java/jwarehouse/openjdk-8/jdk/src/share/classes/sun/ misc/DoubleConsts.java.shtml) pokazuje, że 'DoubleConsts.MAX_VALUE' jest zdefiniowany bezpośrednio jako' java.lang.Double.MAX_VALUE'. Może ten, kto napisał tę funkcję, po prostu wyszukał coś i znalazł najpierw "DoubleConsts.MAX_VALUE"? – TripeHound
Przypadek "MIN_NORMAL" jest mi jeszcze obcy - 'Double' i' DoubleConsts' zawierają * różne * dosłowne reprezentacje dla tej wartości. – Hulk