私はちょうどNaN
の定義をDouble.class
に見つけました。それは言う:0.0
、0.0d
、および0.0D
:Double.NaN = 0.0d/0.0の定義に "d"があるのはなぜですか?
/**
* 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;
私はJava仕様に従ってこれらのリテラルは同じ番号を表していることを知っています。
はまた、他の定数のために、彼らは「D」接尾辞を使用していませんでした:
public static final double POSITIVE_INFINITY = 1.0/0.0;
public static final double NEGATIVE_INFINITY = -1.0/0.0;
なぜ彼らがNaNの定義における0.0の最初の部分に接尾辞dを書く必要がありましたか?
これは目的または偶然によるものですか?
実装者の一部で単純に防御プログラミングを行う可能性があります。 TODOやコメントアウトされたコードで判断すると、JDKはまさにプログラミングのゴールデンスタンダードではありません。 –
これはまったく歴史的なアーティファクトである可能性もあります(オークの「0.0」は浮動小数点リテラルであるかもしれません)。 –
@MarkRotteveelは、[このOak言語仕様のこのバージョン](http://www.eecs.harvard.edu/~waldo/oakSpec.pdf)によると、「2.0fまたは2.0Fまたは2.0float」となっています。 –