15

オラクルから述べているように

OracleDocsからの参照

プリミティブ変換の拡張プリミティブ型での19の特定の変換は、拡張プリミティブ変換と呼ばれます。

  1. バイトからshort、int、long、float、またはdouble
  2. 短から整数、長、浮動小数点、または倍精度
  3. charからint、long、float、またはdouble
  4. intからlong、float、またはdouble
  5. 浮くのが長いですか、それとも2倍ですか?
  6. ダブルにフロート

floatが32ビットで、longが64ビットの場合、それはどのように拡大と見なされますか?これはナローイングと見なされるべきではありませんか?

4

4 に答える 4

25

floatまたはで表すことができる値の範囲は、で表すことがdoubleできる範囲よりもはるかに大きくなりますlonglongaからaに変換すると有効数字が失われる可能性がfloatありますが、範囲が広いため、それでも「拡大」操作です。

Java言語仕様から、§5.1.2

intまたはlong値をfloatに、またはlong値をdoubleに変換すると、精度が低下する可能性があります。つまり、値の最下位ビットの一部が失われる可能性があります。この場合、結果の浮動小数点値は、IEEE 754の最も近い丸めモード(§4.2.4)を使用して、整数値の正しく丸められたバージョンになります。

doubleaはすべての可能なint値を正確に表すことができることに注意してください。

于 2013-03-05T16:41:31.357 に答える
3

floatで表現できる数は、longで表現できる数よりも大きいため、拡大と見なされます。floatが32ビット精度を使用しているからといって、floatが表すことができる数が2^32に制限されているわけではありません。

たとえば、floatの精度はlongよりも低くなりますが、float(float)Long.MAX_VALUE+(float)Long.MAX_VALUEは。よりも大きくなります。Long.MAX_VALUE

于 2013-03-05T16:42:35.210 に答える
2

とは。よりも大きな値を表す可能性があるためfloat、拡大と見なされます。精度が低下する可能性がありますが、値を(少なくとも概算で)表すことは可能です。doublelong

于 2013-03-05T16:41:56.993 に答える
1

簡単に言えば、元のデザイナーがデータをどのように表現してきたかということです。

理想的には、long(64)のビット深度はfloat(32)よりも大きくなります。しかし、フロートデータは、 かなり広い範囲を表すことができる科学的概念を使用して表されています

例:300 [元の番号]:3×102[科学的表現]


長い:-2^63から2^63-1

フロート:(-3.4)* 10 ^ 38から(3.4)* 10 ^ 38

ここで、Long(2の累乗)とFloat(10の累乗)の表現の違いに注意してください。これにより、フロートの範囲が広くなります。

これがお役に立てば幸いです

于 2018-04-03T06:37:36.623 に答える