- すべての実装されたインタフェース:
Serializable
,Comparable<Double>
,Constable
,ConstantDesc
Double
クラスは、プリミティブ型double
の値をオブジェクトにラップします。 Double
型のオブジェクトには、型がdouble
の単一フィールドが含まれます。
さらにこのクラスは、double
をString
に、String
をdouble
に変換する各種メソッドや、double
の処理時に役立つ定数およびメソッドも提供します。
これはvalue-basedクラスです。プログラマは、equalのインスタンスを交換可能として扱い、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。
浮動小数点等価、等価および比較
IEEE 754浮動小数点値には、有限ゼロ以外の値、符号付きゼロ (+0.0
および-0.0
)、符号付きインフィニティ (「正の無限大」と「負の無限大」)、およびNaN (not-a-number)が含まれます。
値セットに対する「等価関係」は、再帰的、対称的および推移的の値のペアに対するブール関係です。 等価関係とオブジェクト等価の詳細は、Object.equals
仕様を参照してください。 等価関係は、操作する値を「同等クラス」というセットにパーティション化します。 等価クラスのすべてのメンバーは、関係の下で相互に等しくなります。 等価クラスには、1つのメンバーのみを含めることができます。 一部の目的では、同等クラスのすべてのメンバーが互いに置換可能です。 特に、数値の式の等価値は、式の結果を変更することなく、互いに「置き換え」にすることができます。つまり、式の結果の等価クラスを変更します。
浮動小数点値に対する組込みの==
操作は、等価関係ではありません。 等価関係を定義していないにもかかわらず、IEEE 754 ==
演算子のセマンティクスは、他の数値計算ニーズを満たすように意図的に設計されました。 浮動小数点値に対して ==
で等価関係のプロパティが満たされないという2つの例外があります:
v1
とv2
の両方がNaNの場合、v1 == v2
の値はfalse
です。 したがって、2つのNaN引数では、等価関係のreflexiveプロパティは==
演算子によって満たされません。v1
が+0.0
を表し、v2
が-0.0
、またはその逆の場合は、+0.0
と-0.0
が様々な浮動小数点演算で区別される場合でも、v1 == v2
の値はtrue
になります。 たとえば、1.0/+0.0
は正の無限大と評価され、1.0/-0.0
はnegativeの無限大と正の無限大に評価され、負の無限大は互いに等しくありません。 したがって、符号付きゼロ入力は、通常、ゼロ結果の符号を決定します。これは、ゼロで除算すると、+0.0
と-0.0
が一般的には相互に置換されないためです。 0(ゼロ)入力の符号は、数学ライブラリのメソッドの結果に置換えられない効果もあります。
組込みの比較演算子(<
, <=
, etc.)を使用した順序比較の場合、NaNの値には別の異常な状況があります: NaNは、それ自体を含め、それより小さくも、それ以上でも、どの値でもありません。 これは、「比較の抜本的な」が保持されないことを意味します。
equals
およびcompareTo
メソッドに適切なセマンティクスを提供するために、これらのメソッドは、単に==
または順序付けされた比較操作を囲むことはできません。 かわりに、equals
は「表現等価」を使用し、NaN引数を相互に等しくなるように定義し、再帰性をリストアし、+0.0
を-0.0
と等しくないように定義します。 比較の場合、compareTo
は、-0.0
が+0.0
より小さく、NaNがそれ自体と等しく、正の無限大より大きいとみなされる合計順序を定義します。
equals
および compareTo
の動作セマンティクスは、「ビット単位変換」によって整数値への浮動小数点値で表されます。
compareTo
によって実装される「自然順序付け」は、「等しい」です。 つまり、2つのオブジェクトがequals
と等しいとレポートされるのは、それらのオブジェクトのcompareTo
が0を返す場合のみです。
equals
および compareTo
に定義された調整済動作により、ラッパー・クラスのインスタンスは従来のデータ構造で適切に動作できます。 たとえば、NaNの値をequals
として定義すると、NaNをHashSet
の要素またはHashMap
のキーとして使用できます。 同様に、 compareTo
を+0.0
、 -0.0
、NaNなどの合計順序として定義すると、ラッパー・クラスのインスタンスをSortedSet
の要素またはSortedMap
のキーとして使用できます。
数値等価と、浮動小数点値に対して定義できるさまざまな有用な等価関係を比較します:
- 「等比数列」 (
==
演算子): (等価関係ではない) - 2つの浮動小数点値は、同じ拡張実数を表します。 拡張実数は、正の無限大および負の無限大で拡張された実数です。 数値等価では、
+0.0
と-0.0
は両方とも同じ実数値0にマップされるため等しくなります。 NaNは、どの実数にもマップされず、それ自体を含むどの値にも等しくありません。 - ビットごとの同等性:
- 2つの浮動小数点値のビットは同じです。
double
値a
およびb
に対するこの等価関係は、式によって実装されますDouble.doubleTo
Raw
LongBits(a) == Double.doubleTo
Raw
LongBits(b)
この関係では、+0.0
と-0.0
は相互に区別され、NaNのビット・パターン・エンコーディングは、NaNのその他のビット・パターン・エンコーディングとは区別されます。 - 表現等価:
- 2つの浮動小数点値は、同じIEEE 754 「データム」を表します。 特に、「有限」値の場合、浮動小数点値の符号、「指数」、および重要なコンポーネントは同じです。 この関係の下:
-
+0.0
と-0.0
は相互に区別されます。 - NaNのビット・パターン・エンコーディングは、相互に同等とみなされます
- 正の無限大は正の無限大に相当し、負の無限大は負の無限大に相当します。
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
Double.valueOf(a).equals(Double.valueOf(b))
Double.compare(a, b) == 0
-
a
およびb
では、a
とb
のどちらもゼロまたはNaNでない場合、a
とb
の3つの関係の数値等価性、ビット単位等価性および表現等価性は同じtrue
/false
値になります。 つまり、2進浮動小数点値の場合、少なくとも1つの引数が0またはNaNの場合のみ、3つの関係は異なります。
小数点↔バイナリ変換の問題
2進浮動小数点演算の多くの驚くべき結果は、10進から2進への変換および2進から10進への変換の側面まで遡ります。 整数値は任意の基数で正確に表すことができますが、基数で正確に表すことができる小数値は基数の関数です。 たとえば、ベース10では、1/3は繰返し小数(0.33333....)ですが、ベース3では、1/3は正確に0.1(3)、つまり1×3-1です。 同様に、基本10では、1/10は0.1 (1 × 10-1)として正確に表現できますが、基本2では繰返しfraction(0.0001100110011...(2))です。float
型の値は24ビットの精度を持ち、double
型の値は53ビットの精度を持ちます。 したがって、0.1は、4ビット繰返しのベース2の繰返し分数であるため、 0.1f
!= 0.1d
です。 16進浮動小数点リテラルを含む詳細:
0.1f
(0x1.99999a0000000p-4f
)の正確な数値は、0.100000001490116119384765625です。0.1d
(0x1.999999999999ap-4d
)の正確な数値は、0.1000000000000000055511151231257827021181583404541015625です。
float
およびdouble
値です。 これらの結果は、小数点精度が6から9桁に相当するfloat
値と、小数点精度が15から17桁に相当するdouble
値と一致しています。 (等価精度は、実数行に沿った異なる点での、2進値と10進値の相対密度によって異なります。)
この表現の10進数の危険性は、金額値をfloat
または double
として格納する際の注意事項を使用する理由の1つです。 代替方法は次のとおりです。
BigDecimal
を使用して小数値を正確に格納します。- 金額が整数になるようにスケール・アップ - たとえば、値がセントで示されている場合は100を乗算し、値がミルで示されている場合は1000を乗算します。 - 次に、そのスケールされた値を整数型に格納します。
有限浮動小数点値と指定された浮動小数点型ごとに、その値にマップされる実数行の連続したリージョンがあります。 デフォルトの丸めから最も近い丸めポリシー(JLS 15.4)では、値のこの連続するリージョンは、通常、幅が1つのulp (最後の場所の単位)で、正確に表現可能な値を中心にしています。 (指数境界では、リージョンは非対称で、大きい指数を持つ側では大きくなります。) たとえば、0.1f
の場合、リージョンは次のように計算できます。
//リストされる数値は正確な値です
oneTenthApproxAsFloat = 0.100000001490116119384765625;
ulpOfoneTenthApproxAsFloat = Math.ulp(0.1f) = 7.450580596923828125E-9;
// 0.1、_excludes_ endpoints
(oneTenthApproxAsFloat - ½ulpOfoneTenthApproxAsFloat, oneTenthApproxAsFloat + ½ulpOfoneTenthApproxAsFloat) =
(0.0999999977648258209228515625, 0.1000000052154064178466796875)に最も近いfloatに変換される数値範囲
特に、この範囲の数値を表す文字列の、正しく丸められた10進数から2進数への変換(Float.parseFloat(String)
など)は、同じ値に変換されます。
Float.parseFloat("0.0999999977648258209228515625000001"); // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.099999998"); // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.1"); // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.100000001490116119384765625"); // exact conversion
Float.parseFloat("0.100000005215406417846679687"); // rounds down to oneTenthApproxAsFloat
Float.parseFloat("0.100000005215406417846679687499999"); // rounds down to oneTenthApproxAsFloat
同様に、0.1d
へのdouble
近似値と Math.ulp(0.1d)
の数値、およびfloat
型とdouble
型のその他の特定の数値に基づいて、 double
型に類似した範囲を構築できます。
前述の変換に示すように、丸めなしで操作が持つ正確な数値と比較すると、結果として同じ浮動小数点値は次のようになります。
- 正確な結果より大きい
- 正確な結果と等しい
- 正確な結果より小さい
0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f;
// Numerical value of computed sum: 1.00000011920928955078125,
// the next floating-point value larger than 1.0f, equal to Math.nextUp(1.0f).
0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d;
// Numerical value of computed sum: 0.99999999999999988897769753748434595763683319091796875,
// the next floating-point value smaller than 1.0d, equal to Math.nextDown(1.0d).
double d = 0.0;
while (d != 1.0) { // Surprising infinite loop
d += 0.1; // Sum never _exactly_ equals 1.0
}
double d = 0.0;
for (int i = 0; i < 10; i++) {
d += 0.1;
} // Value of d is equal to Math.nextDown(1.0).
<
, <=
, >
, >=
)を使用して浮動小数点制限に対してテストします。
double d = 0.0;
while (d <= 1.0) {
d += 0.1;
} // Value of d approximately 1.0999999999999999
- Java言語仕様を参照してください:
-
「4.2.3 浮動小数点型、形式および値」
「4.2.4.浮動小数点演算」
「15.21.1 数値等価演算子==と!=」
「15.20.1 数値比較演算子<
、<=
、>
および>=
」 - 導入されたバージョン:
- 1.0
- 関連項目:
-
フィールドのサマリー
フィールド修飾子と型フィールド説明static final int
double
値を表すために使用されるバイト数です。static final int
有限のdouble
変数が持つ可能性のある最大指数です。static final double
double
型の正の最大有限値(2-2-52)·21023です。static final int
正規化されたdouble
変数が持つ可能性のある最小指数です。static final double
double
型の正の最小標準値2-1022を保持する定数です。static final double
double
型の正の最小非ゼロ値2-1074を保持する定数です。static final double
double
型の非数(NaN)値を保持する定数です。static final double
double
型の負の無限大値を保持する定数です。static final double
double
型の正の無限大値を保持する定数です。static final int
double
値の仮数のビット数。static final int
double
値を表すのに使われるビット数です。プリミティブ型double
を表すClass
インスタンス。 -
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明byte
このDouble
の縮小プリミティブ変換後の値をbyte
として返します。static int
compare
(double d1, double d2) 指定された2つのdouble
値を比較します。int
2つのDouble
オブジェクトを数値的に比較します。このインスタンス自体の名目記述子を含むOptional
を返します。static long
doubleToLongBits
(double value) IEEE 754浮動小数点の「ダブル・フォーマット(double format)」ビット・レイアウトに従って、指定された浮動小数点の値を表現して返します。static long
doubleToRawLongBits
(double value) IEEE 754浮動小数点の「ダブル・フォーマット(double format)」ビット・レイアウトに従って、非数(NaN)値を保持する、指定された浮動小数点値の表現を返します。double
このDouble
オブジェクトのdouble
値を返します。boolean
このオブジェクトと指定されたオブジェクトを比較します。float
このDouble
の縮小プリミティブ変換後の値をfloat
として返します。int
hashCode()
このDouble
オブジェクトのハッシュ・コードを返します。static int
hashCode
(double value) Double.hashCode()
との互換性がある、double
値のハッシュ・コードを返します。int
intValue()
このDouble
の縮小プリミティブ変換後の値をint
として返します。static boolean
isFinite
(double d) 引数が有限の浮動小数点値である場合はtrue
を返し、そうでない場合(NaNおよび無限大の引数の場合)はfalse
を返します。boolean
このDouble
値の絶対値が無限量である場合にはtrue
を、そうでない場合にはfalse
を返します。static boolean
isInfinite
(double v) 指定された数値の絶対値が無限量である場合にはtrue
を、そうでない場合にはfalse
を返します。boolean
isNaN()
このDouble
値が非数(NaN)である場合にはtrue
を、そうでない場合はfalse
を返します。static boolean
isNaN
(double v) 指定された数値が非数(NaN)である場合にはtrue
を、そうでない場合はfalse
を返します。static double
longBitsToDouble
(long bits) 指定されたビット表現と対応するdouble
値を返します。long
このDouble
の縮小プリミティブ変換後の値をlong
として返します。static double
max
(double a, double b) Math.max
を呼び出した場合と同様に、2つのdouble
値の大きいほうを返します。static double
min
(double a, double b) Math.min
を呼び出した場合と同様に、2つのdouble
値の小さいほうを返します。static double
Double
クラスのvalueOf
メソッドを実行した場合と同様に、指定されたString
が表す値に初期化された新しいdouble
値を返します。このインスタンスをConstantDesc
として解決します。その結果がインスタンス自体です。short
このDouble
の縮小プリミティブ変換後の値をshort
として返します。static double
sum
(double a, double b) +演算子のように、2つのdouble
値を加算します。static String
toHexString
(double d) double
引数の16進数文字列表現を返します。toString()
このDouble
オブジェクトの文字列表現を返します。static String
toString
(double d) double
引数の文字列表現を返します。static Double
valueOf
(double d) 指定されたdouble
値を表すDouble
インスタンスを返します。static Double
文字列引数s
で表されるdouble
値を保持するDouble
オブジェクトを返します。
-
フィールド詳細
-
POSITIVE_INFINITY
public static final double POSITIVE_INFINITYdouble
型の正の無限大値を保持する定数です。 これは、Double.longBitsToDouble(0x7ff0000000000000L)
から返される値と等しくなります。- 関連項目:
-
NEGATIVE_INFINITY
public static final double NEGATIVE_INFINITYdouble
型の負の無限大値を保持する定数です。 これは、Double.longBitsToDouble(0xfff0000000000000L)
から返される値と等しくなります。- 関連項目:
-
NaN
public static final double NaNdouble
型の非数(NaN)値を保持する定数です。 これは、Double.longBitsToDouble(0x7ff8000000000000L)
から返される値と等しくなります。- 関連項目:
-
MAX_VALUE
public static final double MAX_VALUEdouble
型の正の最大有限値(2-2-52)·21023です。 16進数浮動小数点リテラル0x1.fffffffffffffP+1023
と同等であり、Double.longBitsToDouble(0x7fefffffffffffffL)
とも同等です。- 関連項目:
-
MIN_NORMAL
public static final double MIN_NORMALdouble
型の正の最小標準値2-1022を保持する定数です。 16進数浮動小数点リテラル0x1.0p-1022
と同等であり、Double.longBitsToDouble(0x0010000000000000L)
とも同等です。- 導入されたバージョン:
- 1.6
- 関連項目:
-
MIN_VALUE
public static final double MIN_VALUEdouble
型の正の最小非ゼロ値2-1074を保持する定数です。 16進数浮動小数点リテラル0x0.0000000000001P-1022
と同等であり、Double.longBitsToDouble(0x1L)
とも同等です。- 関連項目:
-
SIZE
public static final int SIZEdouble
値を表すのに使われるビット数です。- 導入されたバージョン:
- 1.5
- 関連項目:
-
PRECISION
public static final int PRECISIONdouble
値の仮数のビット数。 これは、「Java言語仕様」のセクション4.2.3のパラメータNです。- 導入されたバージョン:
- 19
- 関連項目:
-
MAX_EXPONENT
public static final int MAX_EXPONENT有限のdouble
変数が持つ可能性のある最大指数です。 これは、Math.getExponent(Double.MAX_VALUE)
から返される値と等しくなります。- 導入されたバージョン:
- 1.6
- 関連項目:
-
MIN_EXPONENT
public static final int MIN_EXPONENT正規化されたdouble
変数が持つ可能性のある最小指数です。 これは、Math.getExponent(Double.MIN_NORMAL)
から返される値と等しくなります。- 導入されたバージョン:
- 1.6
- 関連項目:
-
BYTES
public static final int BYTESdouble
値を表すために使用されるバイト数です。- 導入されたバージョン:
- 1.8
- 関連項目:
-
TYPE
-
-
コンストラクタの詳細
-
Double
@Deprecated(since="9", forRemoval=true) public Double(double value) 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このコンストラクタを使用することはほとんどありません。 静的ファクトリvalueOf(double)
は、より良いスペースと時間のパフォーマンスをもたらす可能性が高いため、通常はより良い選択です。プリミティブのdouble
引数を表す、新しく割り当てられたDouble
オブジェクトを構築します。- パラメータ:
value
-Double
によって表される値。
-
Double
@Deprecated(since="9", forRemoval=true) public Double(String s) throws NumberFormatException 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このコンストラクタを使用することはほとんどありません。 文字列をdouble
プリミティブに変換するにはparseDouble(String)
を使用し、文字列をDouble
オブジェクトに変換するにはvalueOf(String)
を使用します。文字列で表されるdouble
型の浮動小数点を表す、新しく割り当てられるDouble
オブジェクトを構築します。 文字列は、valueOf
メソッドと同様にdouble
値に変換されます。- パラメータ:
s
-Double
に変換する文字列。- 例外:
NumberFormatException
- 文字列が解析可能な数値を含まない場合。
-
-
メソッドの詳細
-
toString
public static String toString(double d) double
引数の文字列表現を返します。 次の文字はすべてASCII文字です。- 引数がNaNの場合、変換後の文字列は「
NaN
」。 - そうでない場合、結果は、引数の符号および絶対値を表す文字列になります。 符号が負の場合、結果の文字列の最初の文字は「
-
」('\u002D'
)となり、符号が正の場合、結果の文字列に符号文字は表示されない。 絶対値mについては、次のとおり:- mが無限大の場合、これは文字列
"Infinity"
で表される。したがって、正の無限大の結果は"Infinity"
、負の無限大の結果は"-Infinity"
となる。 - mがゼロの場合、これは文字列
"0.0"
で表される。したがって、負のゼロの結果は"-0.0"
、正のゼロの結果は"0.0"
となる。 - それ以外の場合、mは正で有限です。 次の2つの段階で文字列に変換されます:
- 小数点以下の選択: mを表すために、適切に定義された小数点dmが選択されています。 この小数点は、IEEE 754浮動小数点演算の最も近い端数処理ポリシーに従ってmに四捨五入される(ほとんど)です。
- 文字列としての書式設定: 10進数のdmは、値に応じてプレーンまたはコンピュータ化された科学表記で文字列として書式設定されます。
- mが無限大の場合、これは文字列
「小数」は、sが10の倍数でないように、一部の(一意)整数s > 0およびiに対するs×10iという形式の数です。 これらの整数は、それぞれ小数の「仮数」および「指数」です。 小数点のlengthは、10n-1 ≤ s < 10nに一致する(一意)正の整数nです。
有限正のmの小数dmは次のように定義されます:
- IEEE 754浮動小数点演算の通常の「四捨五入」丸めポリシーに従って、Rをmに丸めるすべての小数点のセットにします。
- pは、Rのすべての小数点以下の最小長にします。
- p≥2の場合、Tを長さpのR内のすべての小数点のセットにします。 それ以外の場合は、Tを長さ1または2のR内のすべての小数点のセットにします。
- dmを、mに最も近いTの小数として定義します。 または、Tにこのような小数が2つある場合は、偶数の仮数を持つ小数を選択します。
選択した(独自)の小数点dmが書式設定されます。 s、iおよびnをそれぞれdmの仮数、指数および長さとします。 さらに、e = n + iとします - s1…snをsの通常の10進展開にします。 s1≠0およびsn≠0に注意してください。 下の小数点
'.'
は'\u002E'
で、指数インジケータ'E'
は'\u0045'
です。- ケース -3 ≤ e < 0: dmは、
0.0
…0
としてフォーマットされますs1…sn。小数点とs1の間に正確に -(n + i)ゼロがあります。 たとえば、123×10-4は0.0123
とフォーマットされます。 - ケース0 ≤ e < 7:
- サブケースi ≥0: dmは、s1…snとしてフォーマットされます
0
…0.0
。snと小数点の間に正確にiゼロがあります。 たとえば、123×102は12300.0
とフォーマットされます。 - サブケースi < 0: dmは、s1…としてフォーマットされますsn+i
.
sn+i+1…sn、ここで小数点の右に正確に-i桁あります。 たとえば、123×10-1は12.3
とフォーマットされます。
- サブケースi ≥0: dmは、s1…snとしてフォーマットされます
- ケースe < -3またはe ≥7: コンピュータ化された科学表記法を使用して、dmをフォーマットします。 ここで、eは
Integer.toString(int)
によってフォーマットされます。- サブケースn = 1: dmは、s1
.0E
eとしてフォーマットされます。 たとえば、1×1023は1.0E23
とフォーマットされます。 - サブケースn > 1: dmは、s1
.
s2としてフォーマットされます…snE
e。 たとえば、123×10-21は1.23E-19
とフォーマットされます。
- サブケースn = 1: dmは、s1
浮動小数点値のローカライズされた文字列表現を作成する場合、
NumberFormat
のサブクラスを使用します。- パラメータ:
d
- 変換するdouble
。- 戻り値:
- この引数の文字列表現。
- 引数がNaNの場合、変換後の文字列は「
-
toHexString
public static String toHexString(double d) double
引数の16進数文字列表現を返します。 次の文字はすべてASCII文字です。- 引数がNaNの場合、変換後の文字列は「
NaN
」。 - そうでない場合、変換後の文字列は引数の符号と絶対値を表す。 符号が負の場合、結果の文字列の最初の文字は「
-
」('\u002D'
)となり、符号が正の場合、結果の文字列に符号文字は表示されない。 絶対値mについては、次のとおり:- mが無限大の場合、これは文字列
"Infinity"
で表される。したがって、正の無限大の結果は"Infinity"
、負の無限大の結果は"-Infinity"
となる。 - mがゼロの場合、これは文字列
"0x0.0p0"
で表される。したがって、負のゼロの結果は"-0x0.0p0"
、正のゼロの結果は"0x0.0p0"
となる。 - mが正規化された表現の
double
値の場合は、有効数字と指数のフィールドを表すのに部分文字列が使われる。 有効数字は、文字列"0x1."
と、小数部として残りの有効数字の小文字の16進表現を続けて表される。 すべての桁が0でないかぎり(すべてが0の場合は単一の0を使用)、16進表現の末尾の0は削除される。 次に、指数は、指数値でInteger.toString
を呼び出して生成するときのように、"p"
とそれに続く完全な指数の10進数文字列で表される。 - mが非正規表現の
double
値の場合、有効数字は、文字列"0x0."
と、小数部として残りの有効数字の16進表現を続けて表される。 16進表現の末尾の0は削除されます。 次に、指数は"p-1022"
で表される。 サブノーマル有効数字内に、ゼロでない数字が1つ以上存在する必要があることに留意してください。
- mが無限大の場合、これは文字列
例 浮動小数点値 16進数文字列 1.0
0x1.0p0
-1.0
-0x1.0p0
2.0
0x1.0p1
3.0
0x1.8p1
0.5
0x1.0p-1
0.25
0x1.0p-2
Double.MAX_VALUE
0x1.fffffffffffffp1023
Minimum Normal Value
0x1.0p-1022
Maximum Subnormal Value
0x0.fffffffffffffp-1022
Double.MIN_VALUE
0x0.0000000000001p-1022
- パラメータ:
d
- 変換するdouble
。- 戻り値:
- この引数の16進数の文字列表現。
- 導入されたバージョン:
- 1.5
- 引数がNaNの場合、変換後の文字列は「
-
valueOf
public static Double valueOf(String s) throws NumberFormatException 文字列引数s
で表されるdouble
値を保持するDouble
オブジェクトを返します。s
がnull
の場合、NullPointerException
がスローされます。s
内の先頭と末尾の空白文字は無視されます。 空白文字は、String.trim()
メソッドで削除されるときのように削除されます。つまり、ASCIIの空白文字と制御文字の両方が削除されます。s
の残りの文字が、次の字句構文ルールに従ってFloatValueを構成します。- FloatValue:
- Signopt
NaN
- Signopt
Infinity
- Signopt FloatingPointLiteral
- Signopt HexFloatingPointLiteral
- SignedInteger
- Signopt
- HexFloatingPointLiteral:
- HexSignificand BinaryExponent FloatTypeSuffixopt
- HexSignificand:
- HexNumeral
- HexNumeral
.
0x
HexDigitsopt.
HexDigits0X
HexDigitsopt.
HexDigits - HexNumeral
- BinaryExponent:
- BinaryExponentIndicator SignedInteger
- BinaryExponentIndicator:
p
P
s
の形式がFloatValueでない場合は、NumberFormatException
がスローされます。 そうでない場合、s
は通常の「浮動小数点表記」、つまり正確な10進値または16進値を表していると見なされます。この正確な数値は、概念上は「無限に正確なバイナリ値」に変換されてから、IEEE 754浮動小数点計算法による通常の最近似値丸め法(ゼロ値の符号保持を含む)に従ってdouble
型に丸められます。 最近似値丸め法は、オーバーフローやアンダーフローの動作が発生することも意味します。s
の正確な値の絶対値が十分大きい場合(MAX_VALUE
+ulp(MAX_VALUE)
/2以上の場合)、double
に丸めると無限大になり、s
の正確な値が十分小さい場合(MIN_VALUE
/2以下の場合)、float に丸めるとゼロになることに注意してください。 最後に、丸めが完了したら、このdouble
値を表すDouble
オブジェクトが返されます。浮動小数点値のローカライズされた文字列表現を解釈する場合、
NumberFormat
のサブクラスを使用します。末尾の形式指定子つまり浮動小数点リテラルの種類を決定する指定子(
1.0f
はfloat
値、1.0d
はdouble
値)は、このメソッドの結果に与えません。 つまり、入力文字列の数値は、ターゲットの浮動小数点型に直接変換されます。 文字列をfloat
に変換し、float
をdouble
に変換する2ステップのシーケンスは、文字列をdouble
に変換するのと等価ではありません。 たとえば、float
リテラル0.1f
はdouble
値0.10000000149011612
と等価です。float
リテラル0.1f
はdouble
リテラル0.1
とは異なる数値を表します。 数値0.1をバイナリ浮動小数点数で正確に表すことはできません。無効な文字列でこのメソッドが呼び出されたり、
NumberFormatException
がスローされたりしないようにするには、次の正規表現を使って入力文字列をスクリーニングできます。final String Digits = "(\\p{Digit}+)"; final String HexDigits = "(\\p{XDigit}+)"; // an exponent is 'e' or 'E' followed by an optionally // signed decimal integer. final String Exp = "[eE][+-]?"+Digits; final String fpRegex = ("[\\x00-\\x20]*"+ // Optional leading "whitespace" "[+-]?(" + // Optional sign character "NaN|" + // "NaN" string "Infinity|" + // "Infinity" string // A decimal floating-point string representing a finite positive // number without a leading sign has at most five basic pieces: // Digits . Digits ExponentPart FloatTypeSuffix // // Since this method allows integer-only strings as input // in addition to strings of floating-point literals, the // two sub-patterns below are simplifications of the grammar // productions from section 3.10.2 of // The Java Language Specification. // Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt "((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+ // . Digits ExponentPart_opt FloatTypeSuffix_opt "(\\.("+Digits+")("+Exp+")?)|"+ // Hexadecimal strings "((" + // 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt "(0[xX]" + HexDigits + "(\\.)?)|" + // 0[xX] HexDigits_opt . HexDigits BinaryExponent FloatTypeSuffix_opt "(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" + ")[pP][+-]?" + Digits + "))" + "[fFdD]?))" + "[\\x00-\\x20]*");// Optional trailing "whitespace" if (
Pattern.matches
(fpRegex, myString)) Double.valueOf(myString); // Will not throw NumberFormatException else { // Perform suitable alternative action }- パラメータ:
s
- 解析される文字列。- 戻り値:
String
引数により表される値を保持するDouble
オブジェクト。- 例外:
NumberFormatException
- 文字列が解析可能な数値を含まない場合。- 関連項目:
-
valueOf
public static Double valueOf(double d) 指定されたdouble
値を表すDouble
インスタンスを返します。 新規Double
インスタンスが不要な場合、通常このメソッドがコンストラクタDouble(double)
に優先して使用されます。その理由は、このメソッドが頻繁に要求される値をキャッシュするので、操作に必要な領域や時間がはるかに少なくて済む場合が多いためです。- パラメータ:
d
- double値。- 戻り値:
d
を表すDouble
インスタンス。- 導入されたバージョン:
- 1.5
-
parseDouble
public static double parseDouble(String s) throws NumberFormatException Double
クラスのvalueOf
メソッドを実行した場合と同様に、指定されたString
が表す値に初期化された新しいdouble
値を返します。- パラメータ:
s
- 解析される文字列。- 戻り値:
- 文字列引数で表される
double
値。 - 例外:
NullPointerException
- 文字列がnullの場合NumberFormatException
- 文字列が解析可能なdouble
を含まない場合- 導入されたバージョン:
- 1.2
- 関連項目:
-
isNaN
public static boolean isNaN(double v) 指定された数値が非数(NaN)である場合にはtrue
を、そうでない場合はfalse
を返します。- APIのノート:
- このメソッドは、IEEE 754で定義されているisNaN演算に対応します。
- パラメータ:
v
- 判定される値。- 戻り値:
- 引数の値がNaNである場合は
true
、そうでない場合はfalse
。
-
isInfinite
public static boolean isInfinite(double v) 指定された数値の絶対値が無限量である場合にはtrue
を、そうでない場合にはfalse
を返します。- APIのノート:
- このメソッドは、IEEE 754で定義されているisInfinite演算に対応します。
- パラメータ:
v
- 判定される値。- 戻り値:
- 引数が正または負の無限値の場合は
true
、そうでない場合はfalse
。
-
isFinite
public static boolean isFinite(double d) 引数が有限の浮動小数点値である場合はtrue
を返し、そうでない場合(NaNおよび無限大の引数の場合)はfalse
を返します。- APIのノート:
- このメソッドは、IEEE 754で定義されているisFinite演算に対応します。
- パラメータ:
d
- 判定されるdouble
値- 戻り値:
- その引数が有限の浮動小数点値である場合は
true
、それ以外の場合はfalse
- 導入されたバージョン:
- 1.8
-
isNaN
public boolean isNaN()このDouble
値が非数(NaN)である場合にはtrue
を、そうでない場合はfalse
を返します。- 戻り値:
- このオブジェクトが表す値がNaNである場合は
true
、そうでない場合はfalse
。
-
isInfinite
public boolean isInfinite()このDouble
値の絶対値が無限量である場合にはtrue
を、そうでない場合にはfalse
を返します。- 戻り値:
- このオブジェクトが表す値が正の無限大または負の無限大である場合は
true
、そうでない場合はfalse
。
-
toString
-
byteValue
public byte byteValue()このDouble
の縮小プリミティブ変換後の値をbyte
として返します。- オーバーライド:
byteValue
、クラスNumber
- 戻り値:
- このオブジェクトが表す
double
値をbyte
型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
- 導入されたバージョン:
- 1.1
-
shortValue
public short shortValue()このDouble
の縮小プリミティブ変換後の値をshort
として返します。- オーバーライド:
shortValue
、クラスNumber
- 戻り値:
- このオブジェクトが表す
double
値をshort
型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
- 導入されたバージョン:
- 1.1
-
intValue
public int intValue()このDouble
の縮小プリミティブ変換後の値をint
として返します。- 定義:
intValue
、クラスNumber
- 戻り値:
- このオブジェクトが表す
double
値をint
型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
-
longValue
public long longValue()このDouble
の縮小プリミティブ変換後の値をlong
として返します。- 定義:
longValue
、クラスNumber
- 戻り値:
- このオブジェクトが表す
double
値をlong
型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
-
floatValue
public float floatValue()このDouble
の縮小プリミティブ変換後の値をfloat
として返します。- 定義:
floatValue
、クラスNumber
- APIのノート:
- このメソッドは、IEEE 754で定義されているconvertFormat演算に対応します。
- 戻り値:
- このオブジェクトが表す
double
値をfloat
型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
- 導入されたバージョン:
- 1.0
-
doubleValue
public double doubleValue()このDouble
オブジェクトのdouble
値を返します。- 定義:
doubleValue
、クラスNumber
- 戻り値:
- このオブジェクトが表す
double
値
-
hashCode
public int hashCode()このDouble
オブジェクトのハッシュ・コードを返します。 計算された結果は、doubleToLongBits(double)
メソッドの結果とまったく同じように、このDouble
オブジェクトが表すプリミティブdouble
値のlong
整数をビット表現した上位32ビットと下位32ビットの排他的論理和になります。 すなわち、ハッシュ・コードは次の式の値です。(int)(v^(v>>>32))
v
は次の式によって定義されます。long v = Double.doubleToLongBits(this.doubleValue());
-
hashCode
public static int hashCode(double value) Double.hashCode()
との互換性がある、double
値のハッシュ・コードを返します。- パラメータ:
value
- ハッシュ対象の値- 戻り値:
double
値のハッシュ・コード値。- 導入されたバージョン:
- 1.8
-
equals
public boolean equals(Object obj) このオブジェクトと指定されたオブジェクトを比較します。 結果がtrue
になるのは、引数がnull
でなく、このオブジェクトが表すdouble
値と同じ値を保持するdouble
を表すDouble
オブジェクトである場合だけです。 このため、2つのdouble
値が等しいと見なされるのは、doubleToLongBits(double)
メソッドを各値に適用したときに同一のlong
値が返される場合だけです。- オーバーライド:
equals
、クラスObject
- APIのノート:
- このメソッドは、
==
演算子が等価関係を定義せず、「等しい契約」を満たすために等価関係を実装する必要があるため、double
値の==
演算子ではなくdoubleToLongBits(double)
という観点で定義されます。浮動小数点の等価性と等価性の詳細は、「このディスカッション」を参照してください。 - パラメータ:
obj
- 比較対象の参照オブジェクト。- 戻り値:
- このオブジェクトがobj引数と同じである場合は
true
、それ以外の場合はfalse
。 - Java言語仕様を参照してください:
-
「15.21.1 数値等価演算子==と!=」
- 関連項目:
-
doubleToLongBits
public static long doubleToLongBits(double value) IEEE 754浮動小数点の「ダブル・フォーマット(double format)」ビット・レイアウトに従って、指定された浮動小数点の値を表現して返します。ビット63 (マスク
0x8000000000000000L
によって選択されるビット)は、浮動小数点の符号を表します。 ビット62-52 (マスク0x7ff0000000000000L
によって選択されるビット)は、指数を表します。 ビット51-0 (マスク0x000fffffffffffffL
によって選択されるビット)は、浮動小数点の有効値(仮数と呼ばれる場合もある)を表します。引数が正の無限大の場合、結果は
0x7ff0000000000000L
になります。引数が負の無限大の場合、結果は
0xfff0000000000000L
になります。引数がNaNの場合、結果は
0x7ff8000000000000L
になります。どの場合も、返される値は
long
整数であり、longBitsToDouble(long)
メソッドを指定すると、doubleToLongBits
への引数と同じ浮動小数点値になります(すべてのNaN値が単一の「正規」NaN値に収納されることを除く)。- パラメータ:
value
-double
精度の浮動小数点値。- 戻り値:
- 浮動小数点値を表すビット。
-
doubleToRawLongBits
public static long doubleToRawLongBits(double value) IEEE 754浮動小数点の「ダブル・フォーマット(double format)」ビット・レイアウトに従って、非数(NaN)値を保持する、指定された浮動小数点値の表現を返します。ビット63 (マスク
0x8000000000000000L
によって選択されるビット)は、浮動小数点の符号を表します。 ビット62-52 (マスク0x7ff0000000000000L
によって選択されるビット)は、指数を表します。 ビット51-0 (マスク0x000fffffffffffffL
によって選択されるビット)は、浮動小数点の有効値(仮数と呼ばれる場合もある)を表します。引数が正の無限大の場合、結果は
0x7ff0000000000000L
になります。引数が負の無限大の場合、結果は
0xfff0000000000000L
になります。引数がNaNの場合、返される値は実際のNaN値を示す
long
整数です。doubleToLongBits
メソッドとは異なり、doubleToRawLongBits
メソッドが、すべてのビット・パターン符号化NaNを単一の「正規」NaN値に収納することはありません。どの場合も、返される値は
long
整数であり、longBitsToDouble(long)
メソッドを指定すると、doubleToRawLongBits
への引数と同じ浮動小数点値になります。- パラメータ:
value
-double
精度の浮動小数点値。- 戻り値:
- 浮動小数点値を表すビット。
- 導入されたバージョン:
- 1.3
-
longBitsToDouble
public static double longBitsToDouble(long bits) 指定されたビット表現と対応するdouble
値を返します。 引数は、IEEE 754浮動小数点「倍精度」ビット配列に従った浮動小数点表現と見なされます。引数が
0x7ff0000000000000L
の場合、結果は正の無限大値になります。引数が
0xfff0000000000000L
の場合、結果は負の無限大値になります。引数が
0x7ff0000000000001L
から0x7fffffffffffffffL
、または0xfff0000000000001L
から0xffffffffffffffffL
の範囲内の値である場合、結果はNaNになります。 Javaにより提供されるIEEE 754浮動小数点操作は、異なるビット・パターンを持つ同じ型の2つのNaN値を識別できません。 個別のNaN値を識別できるのは、Double.doubleToRawLongBits
メソッドを使用する場合だけです。そのほかの場合では、s、e、およびmの3つの値について次の引数から計算できるとします。
int s = ((bits >> 63) == 0) ? 1 : -1; int e = (int)((bits >> 52) & 0x7ffL); long m = (e == 0) ? (bits & 0xfffffffffffffL) << 1 : (bits & 0xfffffffffffffL) | 0x10000000000000L;
このメソッドは、
long
引数とまったく同じビット・パターンを持つdouble
NaNを返すことができない可能性があります。 IEEE 754では、2種類のNaN (「シグナルを発生しないNaN」と「シグナルを発生するNaN」)を区別します。 2種類のNaNの違いは、通常Javaでは確認できません。 シグナルを発生するNaNでの算術演算では、シグナルを発生するNaNが、異種でありながら同様のビット・パターンを持つシグナルを発生しないNaNに変わります。 ただし、シグナルを発生するNaNを単にコピーする一部のプロセッサも、この変換も行います。 特に、シグナルを発生するNaNをコピーして、呼出し側のメソッドに返すことで、この変換を実行できます。 したがって、longBitsToDouble
は、シグナルを発生するNaNビット・パターンを持つdouble
を返すことができない可能性があります。 したがって、一部のlong
値では、doubleToRawLongBits(longBitsToDouble(start))
がstart
と等しくならないことがあります。 加えて、どの特定のビット・パターンがシグナルを発生するNaNを表すかは、プラットフォームによって異なります。シグナルを発生しないかシグナルを発生するかにかかわらず、すべてのNaNビット・パターンは上に示すNaNの範囲になければいけません。- パラメータ:
bits
- 任意のlong
整数。- 戻り値:
- 同じビット・パターンを持つ
double
浮動小数点値。
-
compareTo
public int compareTo(Double anotherDouble) 2つのDouble
オブジェクトを数値的に比較します。 このメソッドでは、double
値のJava言語数値比較演算子(<, <=, ==, >=, >
)で定義された不完全な順序と比較して、2つの差異があるDouble
オブジェクトに合計順序が適用されます。- NaNは、他の値に関して「順序なし」で、比較演算子ではそれ自体に対して不等です。 このメソッドは、
Double.NaN
をそれ自体に等しく、他のすべてのdouble
値(Double.POSITIVE_INFINITY
を含む)より大きく定義することを選択します。 - 正のゼロと負のゼロは、数値で比較されますが、区別できる値は明確です。 このメソッドでは、正のゼロ((
+0.0d
))を負のゼロ((-0.0d
))より大きい値として定義します。
Double
オブジェクトの「自然順序付け」が「等しい」であることが保証されます。浮動小数点比較および順序付けの詳細は、「このディスカッション」を参照してください。- 定義:
compareTo
、インタフェースComparable<Double>
- パラメータ:
anotherDouble
- 比較対象のDouble
。- 戻り値:
anotherDouble
がこのDouble
と同じ数値の場合は値0
。Double
がanotherDouble
より小さい数値の場合は0
より小さい値。Double
がanotherDouble
より大きい数値の場合は0
より大きい値。- Java言語仕様を参照してください:
-
「15.20.1 数値比較演算子
<
、<=
、>
および>=
」 - 導入されたバージョン:
- 1.2
- NaNは、他の値に関して「順序なし」で、比較演算子ではそれ自体に対して不等です。 このメソッドは、
-
compare
public static int compare(double d1, double d2) 指定された2つのdouble
値を比較します。 返される整数値の符号は、次の呼出しで返される整数の符号と同じになります。Double.valueOf(d1).compareTo(Double.valueOf(d2))
- パラメータ:
d1
- 比較する最初のdouble
d2
- 比較する2番目のdouble
- 戻り値:
d1
がこのd2
と同じ数値の場合は値0
。d1
がd2
より小さい数値の場合は0
より小さい値。d1
がd2
より大きい数値の場合は0
より大きい値。- 導入されたバージョン:
- 1.4
-
sum
public static double sum(double a, double b) +演算子のように、2つのdouble
値を加算します。- APIのノート:
- このメソッドは、IEEE 754で定義されている追加演算に対応します。
- パラメータ:
a
- 第1オペランドb
- 第2オペランド- 戻り値:
a
とb
の合計- Java言語仕様を参照してください:
-
4.2.4 浮動小数点操作
- 導入されたバージョン:
- 1.8
- 関連項目:
-
max
public static double max(double a, double b) Math.max
を呼び出した場合と同様に、2つのdouble
値の大きいほうを返します。- APIのノート:
- このメソッドは、IEEE 754で定義されている最大演算数に対応します。
- パラメータ:
a
- 第1オペランドb
- 第2オペランド- 戻り値:
a
とb
のどちらか大きい方- 導入されたバージョン:
- 1.8
- 関連項目:
-
min
public static double min(double a, double b) Math.min
を呼び出した場合と同様に、2つのdouble
値の小さいほうを返します。- APIのノート:
- このメソッドは、IEEE 754で定義されている最小動作に対応します。
- パラメータ:
a
- 第1オペランドb
- 第2オペランド- 戻り値:
a
とb
のどちらか小さい方。- 導入されたバージョン:
- 1.8
- 関連項目:
-
describeConstable
-
resolveConstantDesc
public Double resolveConstantDesc(MethodHandles.Lookup lookup) このインスタンスをConstantDesc
として解決します。その結果がインスタンス自体です。- 定義:
- インタフェース
ConstantDesc
内のresolveConstantDesc
- パラメータ:
lookup
- ignored- 戻り値:
- Doubleインスタンス
- 導入されたバージョン:
- 12
-