两个看似相同的语句之间的浮点结果差异

时间:2011-09-14 23:52:48

标签: .net vb.net visual-studio-2010

我有以下Visual Basic代码:

    Dim L16, L23, L45, t As Double
    Dim LBase, LAdjacent, LOpposite As Double

    L16 = 20
    L23 = 10
    L45 = 30
    t = 1

    LBase = L16
    LAdjacent = L23
    LOpposite = L45

    Dim Sum As Double

    Sum = t ^ 2 * L16 + 6 * t ^ 3 + 2 * L16 ^ 3 + 3 * L16 ^ 2 * t + 2 * L23 ^ 2 * L16 + L23 ^ 2 * t + 8 * L23 * t * L16 + 4 * L23 * t ^ 2 - L45 ^ 2 * L16 + L45 ^ 2 * t - 4 * L45 * t * L16 + 4 * L45 * t ^ 2

    Console.WriteLine("1st Sum: " & Sum)

    Sum = t ^ 2 + LBase + 6 * t ^ 3 + 2 * LBase ^ 3 + 3 * LBase ^ 2 * t + 2 * LAdjacent ^ 2 * LBase + LAdjacent ^ 2 * t + 8 * LAdjacent * t * LBase + 4 * LAdjacent * t ^ 2 - LOpposite ^ 2 * LBase + LOpposite ^ 2 * t - 4 * LOpposite * t * LBase + 4 * LOpposite * t ^ 2

    Console.WriteLine("2nd Sum: " & Sum)

两个方程都应该是等价的:我只是简单地用Lase替换L16,用LAdjacent替换L23,用LOpposite替换L45。然而第一个等式输出3586而第二个输出3587.为什么?

我正在使用VS2010

阿姆鲁

1 个答案:

答案 0 :(得分:5)

第一次总和计算:

Sum = t ^ 2 * L16 + ...

第二次总和计算:

Sum = t ^ 2 + LBase + ...

其中一个有*,另一个有+