получилось ожидаемое число. Я хочу вычесть из 0.813 - 0.001 = 0.812, но получается 0.81211111111. Что делать?
Почитать, как работает double, и почему он не имеет абсолютную точность
fp конечно забавно устроена, но то, что вы тут рассказываете невозможно.
Не использовать double - он не для того, что ты хочешь.
варианты: - округлять до заданной точности + регулировать вывод путем указания кол-во значащих цифр после запятой - перейти на fix point представление (integer + scale)
Ну да невозможно, я перепутал слегла, на деле там так 0.813 - 0.001 = 0.811999999999999999999999
Округление помогло. Вот такая функция: double roundPrecision(double& inputPosition, int precision) { int valuePrecision = pow(10, abs(precision)); return round(inputPosition*valuePrecision)/valuePrecision; }
человек видит две переменные. Печатает одну - получает 0.813 (но значение переменной реально другое) Печатает другую переменную, получает 0.001 (но значение переменной реально тоже другое) Потом вычисляет результат вычитания одного из другого (точнее наоборот) и печатает результат - получает НЕ 0.812 (но в реальности значение переменной также другое) Так что то, что он пишет, возможно
вообще-то в C++ есть возможность выводить с заданным числом знаков, не надо велосипеды городить
А мне не выводить, мне округлить до заданного знака надо
Не забывай, что при операциях ошибка накапливает при sum считается как max(dx_1, dx_2), при mul как sum(dx_1, dx_2). Ну и важный момент при операциях с очень большими и очень малыми числами.
Обсуждают сегодня