web-dev-qa-db-ja.com

JavaでDoubleはどういう意味ですか?

私はJavaが初めてで、Doubleが何であるかを確認したかったのですか?FloatまたはIntに似ていますか?助けていただければ幸いです。 Doubleおよびその他の場合は小文字のdouble。これが何を意味するのかを誰かが明確にできたら、それは素晴らしいことです!

20
maclunian

Double はラッパークラスです。

Doubleクラスは、プリミティブ型doubleの値をオブジェクトにラップします。 Double型のオブジェクトには、double型の単一フィールドが含まれます。

さらに、このクラスは、doubleをStringに、Stringをdoubleに変換するためのいくつかのメソッドと、doubleを扱うときに役立つ他の定数とメソッドを提供します。

double data type

Doubleデータ型は、倍精度の64ビットIEEE 754浮動小数点です。値の範囲は4.94065645841246544e-324dから1.79769313486231570e + 308d(正または負)です。 10進数値の場合、通常、このデータ型がデフォルトの選択です。前述のように、このデータ型は通貨などの正確な値に使用しないでください。

各データ型とその範囲を確認します: Javaのプリミティブデータ型


重要な注意:正確な値にdoubleを使用する場合は、使用する前に再考する必要があります。 Javaトラップ:double

29
sgokhales

@paxdiabloの答えに対するコメントで、あなたは尋ねました:

「基本的に、FloatよりDoubleを使用した方が良いですか?」

それは複雑な質問です。私は2つの部分でそれを扱います


doublefloatの決定

一方では、doubleは8バイトを占有しますが、floatは4バイトを占有します。それらが多数ある場合、影響はありませんが、これは重要な場合があります。 (値が64ビットマシンのフィールドまたはローカル変数にあり、JVMがそれらを64ビット境界に揃える場合を考慮してください。)さらに、double値を使用した浮動小数点演算は、通常float値...ただし、これはハードウェアに依存します。

一方、doublefloatよりも大きい(および小さい)数値を表し、2倍を超える精度で表すことができます。詳細については、 Wikipedia を参照してください。

難しい質問は、doubleの余分な範囲と精度を実際に必要とするかどうかを知ることです。場合によっては、それが必要であることは明らかです。他ではそれほど明白ではありません。たとえば、マトリックスの反転や標準偏差の計算などの計算を行う場合、余分な精度が重要になる場合があります。一方、場合によっては、doubleでさえも十分な精度が得られないことがあります。 (そして、floatdoubleがあなたに正確な表現を与えることを期待するというtrapに注意してください。彼らはしませんし、できません!)

実際の数値計算における丸め誤差などの影響を扱う数値解析と呼ばれる数学の分野があります。 1970年代のコンピューターサイエンスコースの標準的な部分でした。


DoubleFloatの決定

DoubleFloatの場合、精度と範囲の問題はdoublefloatの場合と同じですが、相対的なパフォーマンス測定値はわずかになります違う。

  • Double(32ビットマシン上)は、通常、16バイト+ 4バイトの参照を取得しますが、Floatの場合は12 + 4バイトです。これをdoublefloatの場合の8バイトと4バイトと比較してください。 は5対4対2対1です。

  • DoubleおよびFloatを含む算術演算では、通常、ポインターを逆参照し、結果を保持する新しいオブジェクトを作成する必要があります(状況に応じて)。これらの余分なオーバーヘッドは、Doubleケースを支持する比率にも影響します。


正しさ

とはいえ、最も重要なことは正しさであり、これは通常最も正確な答えを得ることを意味します。また、精度が重要でない場合でも、「正確すぎる」ことは通常間違っていません。したがって、単純な「経験則」は、doubleよりもfloatを優先して使用することです。ただし、オーバーライドパフォーマンス要件がない限り、 floatを使用すると、その要件に関して違いが生じるという確固たる証拠があります。

22
Stephen C

Doubleは IEEE754 倍精度浮動小数点数で、floatと似ていますが、範囲と精度が大きくなります。

IEEE754単精度数値には32ビット(1符号、8指数、23仮数ビット)がありますが、倍精度数値には64ビット(1符号、11指数、52仮数ビット)があります。

Double in Javaはdouble基本型のクラスバージョンです-doubleを使用できますが、それらを使用してオブジェクトにする必要がある場合は(それらをコレクションに入れるなど)、Doubleオブジェクトにボックス化する必要があります。

3
paxdiablo