如何使数字总和等于1

时间:2011-11-11 16:49:41

标签: c# double

我使用概率,我需要检查值的总和是1.我正在编写单元测试,其中一个测试失败了。这就是它失败的原因:

double[] probabilities = new[] { 0.4, 0.3, 0.2, 0.1 };
double sum = probabilities.Sum();
//On my PC gives sum of 0.99999999999999989

if (sum != 1)
{
    throw new ArgumentException(
        "Sum of the probabilities does not equal to 1. " +
        "Computed value was: " + sum);
}

我可以做些什么来改变这一点:0.4 + 0.3 + 0.2 + 0.1 = 1

3 个答案:

答案 0 :(得分:6)

double不会为你提供这种数学所需的精确度。

切换到decimal,一切都会好的。

答案 1 :(得分:1)

decimal具有您想要的精度。如果您需要10精度,请坚持使用decimal

以下是关于该主题的较旧但相关的文章:What Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 2 :(得分:1)

几乎所有的单元测试系统都有一个断言,它检查双倍的“接近度”这两个值在某个指定的容差范围内。例如,NUnit Assert.AreEqual有一个重载,它需要三个双精度值,即实际值,期望值和delta值,这是前两个值可以通过Assert传递的最大值... < / p>