Właśnie natknąłem się na definicję NaN
w Double.class
. Mówi:Dlaczego istnieje "d" w definicji Double.NaN = 0.0d/0.0?
/**
* A constant holding a Not-a-Number (NaN) value of type
* {@code double}. It is equivalent to the value returned by
* {@code Double.longBitsToDouble(0x7ff8000000000000L)}.
*/
public static final double NaN = 0.0d/0.0;
Wiem, że zgodnie ze specyfikacją Java literały te reprezentują ten sam numer: 0.0
, 0.0d
i 0.0D
.
również do innych stałych, one nie używać „d” przyrostek:
public static final double POSITIVE_INFINITY = 1.0/0.0;
public static final double NEGATIVE_INFINITY = -1.0/0.0;
Dlaczego trzeba pisać przyrostek D do pierwszej części 0.0 w definicji NaN?
Czy to było celowo, czy przypadkowo?
Istnieje możliwość, że jest to po prostu programowanie defensywne na części implementatora. Sądząc po TODO i/lub skomentowanym kodzie, JDK nie jest dokładnie złotym standardem programowania. –
Jest również całkowicie możliwe, że jest to tylko historyczny artefakt (kto wie, może w Dębowym '0.0' był literał float zamiast). –
@MarkRotteveel prawidłowa, zgodnie z [ta wersja specyfikacji językowej Oak] (http://www.eecs.harvard.edu/~waldo/oakSpec.pdf): "2.0f lub 2.0F lub 2.0 float". –