1

私は大学のパワーポイントのスライドを持っており、連続した合計を

1 / i^2

0 から 2260 までのインデックス "i" を使用すると、同じ数値の合計を計算するのとは異なりますが、最も大きいものから最も小さいもの (1/2260^2 から 1/0^2 まで) から始めます。

Cでこれを実行しようとすると、次の結果が得られます。

Increasing Order Sum: 1.644491e+00.
Decreasing Order Sum: 1.644491e+00.
Relative Error (abs(Incr. Sum - Decr. Sum) / abs(Incr. Sum)) : 2.700465e-15.

誰かがなぜこれが起こるのか説明してもらえますか? これらのスライドには解決策がありません。

前もって感謝します!:)

4

1 に答える 1

6

一般に、浮動小数点加算は連想的ではないためです。つまり、(a + b) + cは必ずしも と同じではありませんa + (b + c)

理由を確認するには、次のコードを実行してみてください。

float a = 1e9;
float b = 1;
a += b;
printf("%f\n", a);

100万回に加算bするとどうなるかを考えてみましょう。a次に、操作を交換した場合 (つまり、最後に 1e9 を追加した場合) に何が起こるかを考えてみましょう。

于 2012-05-23T18:26:27.477 に答える