VP: ошибка точности при вычислении гистограмм
Есть такая функция в коде расчёта гистограмм:
int price_to_points(const double price, const double point)
{
return((int)(price / point + 0.5));
}
Но с ней получилась проблема - деление происходит с потерей точности, и после округления (как здесь, через довление 0.5 и приведения типа, либо через встроенный round
) может получиться совсем не то, что хотелось бы, например:
1.10255 / 0.0001 + 0.5 = 11026
1.10255 * 10000.0 + 0.5 = 11026
int(1.10255 / 0.0001) = 11025
int(1.10255 * 10000.0) = 11025
int(1.10255 / 0.0001 + 0.5) = 11025 // !!!
int(1.10255 * 10000.0 + 0.5) = 11026
int(round(1.10255 / 0.0001)) = 11025 // !!!
int(round(1.10255 * 10000.0)) = 11026
Кажется небольшой проблемой, ведь лишь некоторые цены будут округляться неверно, и наверно это не будет сильно влиять на картинку. Но увы, различия весьма заметные:
И с текущим несовершенным расчётом мод всё получается ещё хуже.
Пока заменю деление на умножение, но лучше всё вообще перевести на целочисленный расчёт.
Edited by FXcoder