Я заметил небольшую ошибку в некоторых арифметических вычислениях с использованием double. Это действительно странно, всегда есть небольшая ошибка и/или лишняя значащая цифра.
Сначала я использую atof для преобразования числа, состоящего из двух значащих цифр, которые я читаю из текстового файла (затем я записываю их в вектор):
// Puts into vector
double ask_file, bid_file; // Values of ask and bid from file
double cur_conversion = 0.16;
ask_file = cur_conversion*atof(values[0].c_str());
bid_file = cur_conversion*atof(values[1].c_str());
Затем я делаю арифметику (из другого класса, два разных объекта):
diff = OKC->bid_val() - BV->ask_val(); // diff
diff2 = OKC->ask_val() - BV->bid_val(); // diff2
Это результат:
BV Askfile: 245.267 Bidfile: 245.078
OKC Askfile: 248.82 Bidfile: 248.73
diff: 3.4628 diff2: 3.7416
Как видите, в обоих вычислениях есть ошибка. diff = 3,463, а НЕ 3,4628. И diff2 = 3,742, а НЕ 3,7416.
Вы знаете, что происходит??
float
,double
илиlong double
. - person Dietmar Kühl   schedule 14.02.2015