14

float値がdouble値と異なる理由がわかりません。以下の例から、floatは同じ操作に対してdoubleとは異なる結果を提供するように見えます。

public class Test {

    public static void main(String[] args) {
        double a = 99999.8d;
        double b = 99999.65d;
        System.out.println(a + b);

        float a2 = 99999.8f;
        float b2 = 99999.65f;
        System.out.println(a2 + b2);
    }
}

出力:

199999.45
199999.44

フロートとダブルのこの違いの理由を説明できますか?

4

5 に答える 5

25

浮動小数点は、32ビットのIEEE754浮動小数点です。

doubleは、64ビットのIEEE754浮動小数点です。

したがって、小数部.8と.65のどちらにも終了バイナリ表現がないため、精度の問題であり、丸め誤差があります。ダブルの方が精度が高いため、丸め誤差がわずかに少なくなります。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

于 2012-07-20T14:28:33.353 に答える
14

フロートとダブルのこの違いの理由を説明できますか?

もちろん。2つの10進数タイプがあり、1つは有効数字5桁、もう1つは10桁であるとします。

これらの各タイプの円周率を表すためにどのような値を使用しますか?どちらの場合も、正確に表現できない数値に近づけようとしますが、同じ値になることはありませんね。

floatとについても同じです。doubleどちらもバイナリ浮動小数点型ですが、double精度は。よりも高くなりfloatます。

于 2012-07-20T14:36:04.407 に答える
12
public class Main {

    public static void main(String[] args) {
        float  a=12.6664287277627762f;
        double b=12.6664287277627762;

        System.out.println(a);
        System.out.println(b);
    }
}

出力:

12.666429
12.666428727762776

floatは小数点以下7桁まで処理できます。ダブルは小数点以下約16桁を処理できます。

于 2013-02-02T09:42:31.553 に答える
5

ダブルスはフロートの2倍の精度を持っています。したがって、丸め誤差は小さくなります。

浮動小数点数は(通常)32ビットで、倍精度64ビット(これも通常)です。したがって、floatには、doubleよりも多くの数値で丸め誤差があります。

于 2012-07-20T14:27:17.847 に答える
1

フロートの精度はダブルよりも低くなります。

それはおよそ半分です-23ビット対ダブルの52ビット(Skeetさん、どうもありがとう!)!

floatの場合は32ビット、doubleの場合は64ビット。...「float」という単語の文字数は「double」よりも少ないことを忘れないでください。これは「メモリ」のトリックです:)

于 2012-07-20T14:30:02.023 に答える