Во-первых, я понимаю, что двойной тип в C ++ обсуждался много раз, но я не смог ответить на мой вопрос после поиска.Любая помощь или идея высоко ценится.
Упрощенная версия моего вопроса: Я получил три разных результата (a=-0.926909
, a=-0.926947
и a=-0.926862
), когда я вычислил a=b-c+d
с тремя разными подходами и одинаковыми значениями b
, c
и d
, и я не знаю, какому из них доверять.
Подробная версия моего вопроса::
Недавно я писал программу (на C ++ в Ubuntu 10.10) для обработки некоторых данных.Одна функция выглядит так:
void calc() {
double a, b;
...
a = b - c + d; // c, d are global variables of double
...
}
Когда я использовал GDB для отладки вышеуказанного кода, во время вызова calc () я записал значения b
, c
и d
перед оператором a = b - c + d
следующим образом:
b = 54.7231
c = 55.4051
d = -0.244947
После того, как заявление a = b - c + d
оправдано, я обнаружил, что a=-0.926909
вместо -0.926947
, который рассчитывается калькулятором.Ну, пока это не совсем запутанно, так как я думаю, что это может быть просто проблемой точности.Позже я по какой-то причине повторно внедрил другую версию calc()
.Давайте назовем эту новую версию calc_new()
.calc_new()
почти совпадает с calc()
, за исключением того, как и где вычисляются b
, c
и d
:
void calc_new() {
double a, b;
...
a = b - c + d; // c, d are global variables of double
...
}
На этот раз, когда я выполнял отладку, значенияb
, c
и d
перед оператором a = b - c + d
такие же, как при отладке calc()
: b = 54.7231
, c = 55.4051
, d = -0.244947
.Однако на этот раз после выполнения оператора a = b - c + d
я получил a=-0.926862
.При этом я получил три разных a
, когда вычислил a = b - c + d
с одинаковыми значениями b
, c
и d
.Я думаю, что различия между a=-0.926862
, a=-0.926909
и a=-0.926947
невелики, но я не могу понять причину.И какой из них правильный?
С большим спасибо, Том