1

double 値を指定すると、次のようになります。

double a
double b
b < a

もしも:

double c = a - b;
double d = c + b

次に、二重数が次のことを保証します。

d == a ?

例:

double c = 20.0d - 2.0d;
double d = c + 2.0d;

d が再び 20.0d になるというのは本当ですか? したがって、一般的に、同じ double を減算して加算しても同じ値になるかどうかを尋ねています。これは、a=20.0d および b=2.0d の 1 つのケースのみです。double 値ごとにこれを確認する必要があります。

私はそのような例で試しました:

double s = 4.8d;
System.out.print(s + "\n");
s -= 0.4d;
System.out.print(s + "\n");
s += 0.4d;
System.out.print(s + "\n");

この例では、結果は私の期待と一致しました。

4.8
4.3999999999999995
4.8

これが私が必要とするものです。

ありがとう。

4

2 に答える 2

1

これは 20 と 2 に対しては機能しますが、一般的には確実に機能しません。加算によって表現の指数部分が強制的にインクリメントされると、double 値では機能しなくなります。結果の精度がいくらか失われます。

これを説明する簡単な例 (Java) を次に示します。

double a = 1.0 / 3;
double b = 0.5;
double c = a + b;
double d = c - b;
System.out.println(a);
System.out.println(d);
System.out.println(a == d);

この例を実行すると、次のように出力されます

0.3333333333333333
0.33333333333333326
false

加算される値の指数が異なる場合、結果はさらに顕著になります。たとえば、bの値を から0.5に変更する100000と、差はさらに大きくなります。

0.3333333333333333
0.3333333333284827
false

に変更bする1E15

0.3333333333333333
0.375
false

に変更bする1E20と、元の痕跡もa消えます。

0.3333333333333333
0.0
false
于 2013-11-03T12:34:20.647 に答える