私はJavaが初めてで、Double
が何であるかを確認したかったのですか?FloatまたはIntに似ていますか?助けていただければ幸いです。 Double
およびその他の場合は小文字のdouble
。これが何を意味するのかを誰かが明確にできたら、それは素晴らしいことです!
Double はラッパークラスです。
Doubleクラスは、プリミティブ型doubleの値をオブジェクトにラップします。 Double型のオブジェクトには、double型の単一フィールドが含まれます。
さらに、このクラスは、doubleをStringに、Stringをdoubleに変換するためのいくつかのメソッドと、doubleを扱うときに役立つ他の定数とメソッドを提供します。
Doubleデータ型は、倍精度の64ビットIEEE 754浮動小数点です。値の範囲は4.94065645841246544e-324dから1.79769313486231570e + 308d(正または負)です。 10進数値の場合、通常、このデータ型がデフォルトの選択です。前述のように、このデータ型は通貨などの正確な値に使用しないでください。
各データ型とその範囲を確認します: Javaのプリミティブデータ型 。
重要な注意:正確な値にdoubleを使用する場合は、使用する前に再考する必要があります。 Javaトラップ:double
@paxdiabloの答えに対するコメントで、あなたは尋ねました:
「基本的に、FloatよりDoubleを使用した方が良いですか?」
それは複雑な質問です。私は2つの部分でそれを扱います
double
とfloat
の決定一方では、double
は8バイトを占有しますが、float
は4バイトを占有します。それらが多数ある場合、影響はありませんが、これは重要な場合があります。 (値が64ビットマシンのフィールドまたはローカル変数にあり、JVMがそれらを64ビット境界に揃える場合を考慮してください。)さらに、double
値を使用した浮動小数点演算は、通常float
値...ただし、これはハードウェアに依存します。
一方、double
はfloat
よりも大きい(および小さい)数値を表し、2倍を超える精度で表すことができます。詳細については、 Wikipedia を参照してください。
難しい質問は、double
の余分な範囲と精度を実際に必要とするかどうかを知ることです。場合によっては、それが必要であることは明らかです。他ではそれほど明白ではありません。たとえば、マトリックスの反転や標準偏差の計算などの計算を行う場合、余分な精度が重要になる場合があります。一方、場合によっては、double
でさえも十分な精度が得られないことがあります。 (そして、float
とdouble
があなたに正確な表現を与えることを期待するというtrapに注意してください。彼らはしませんし、できません!)
実際の数値計算における丸め誤差などの影響を扱う数値解析と呼ばれる数学の分野があります。 1970年代のコンピューターサイエンスコースの標準的な部分でした。
Double
とFloat
の決定Double
対Float
の場合、精度と範囲の問題はdouble
対float
の場合と同じですが、相対的なパフォーマンス測定値はわずかになります違う。
Double
(32ビットマシン上)は、通常、16バイト+ 4バイトの参照を取得しますが、Float
の場合は12 + 4バイトです。これをdouble
対float
の場合の8バイトと4バイトと比較してください。 比は5対4対2対1です。
Double
およびFloat
を含む算術演算では、通常、ポインターを逆参照し、結果を保持する新しいオブジェクトを作成する必要があります(状況に応じて)。これらの余分なオーバーヘッドは、Double
ケースを支持する比率にも影響します。
とはいえ、最も重要なことは正しさであり、これは通常最も正確な答えを得ることを意味します。また、精度が重要でない場合でも、「正確すぎる」ことは通常間違っていません。したがって、単純な「経験則」は、double
よりもfloat
を優先して使用することです。ただし、オーバーライドパフォーマンス要件がない限り、 float
を使用すると、その要件に関して違いが生じるという確固たる証拠があります。
Doubleは IEEE754 倍精度浮動小数点数で、floatと似ていますが、範囲と精度が大きくなります。
IEEE754単精度数値には32ビット(1符号、8指数、23仮数ビット)がありますが、倍精度数値には64ビット(1符号、11指数、52仮数ビット)があります。
Double
in Javaはdouble基本型のクラスバージョンです-doubleを使用できますが、それらを使用してオブジェクトにする必要がある場合は(それらをコレクションに入れるなど)、Double
オブジェクトにボックス化する必要があります。