Расхождение результата с плавающей точкой между двумя, казалось бы, одинаковыми утверждениями - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть следующий код 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)

Оба уравнения должны быть эквивалентны: я просто заменил L16 на LBase, L23 на LAdjacent и L45 на LOppverse.Тем не менее, первое уравнение выдает 3586, а второе выдает 3587. Почему?

Я использую VS2010

Amr

1 Ответ

5 голосов
/ 15 сентября 2011

Расчет первой суммы:

Sum = t ^ 2 * L16 + ...

Расчет второй суммы:

Sum = t ^ 2 + LBase + ...

Один имеет *, где другой имеет +.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...