public static void Main()
{
Dictionary<string, double> values = new Dictionary<string, double>();
values.Add("a", 0.002);
values.Add("b", 0.003);
values.Add("c", 0.012);
// Summing iteratively.
double v1 = 615.0;
foreach (KeyValuePair<string, double> kp in values)
{
v1 += kp.Value;
}
Console.WriteLine(v1);
// Summing using the Sum method.
double v2 = 615.0;
v2 += values.Values.Sum();
Console.WriteLine(v2);
Console.ReadLine();
}
デバッガーで v1 の値を見ると、値は 615.01699999999994 ですが、v2 の値は 615.017 です。何らかの理由で、Sum メソッドは正確な結果を生成しますが、それらを繰り返し合計すると正確な結果が得られません。(2 つの値を出力すると同じ値になりますが、これは WriteLine メソッドによる丸めが原因であると推測されます。)
ここで何が起こっているか知っている人はいますか?