Возможный дубликат:
Запись чисел в файл с большей точностью — C ++
Сохраняя значения широты / долготы как double
Я продолжаю заканчивать с переменными, которые содержат урезанные числа -e.g. 47.2792 для 47.279229 и 8.42432 для 8.424317 — Каков наилучший способ заставить переменные хранить все цифры без потерь во время как назначения переменных, так и выполнения арифметических операций — например, добавление 0.01098901098 к 47.279229 и сохранение его как новой переменной без потери точности и т. д. -? setprecision
обрабатывает это для потоков, но мне еще предстоит найти способ, который будет служить его переменным / математическим аналогом.
Тип double
внутренне [обычно] хранится в виде двоичной плавающей запятой. В общем, десятичные значения не могут быть точно представлены с использованием двоичных значений с плавающей запятой, хотя исходные десятичные значения часто могут быть восстановлены точно (за исключением правильного числа конечных нулей). При выполнении вычислений значения, близкие к исходным значениям, обрабатываются, что вносит дополнительные ошибки. Результат преобразования десятичных дробных чисел в double
вычисление с этими значениями и их преобразование приведет к значениям, близким к ожидаемому результату, но это не будет точным.
Если вам известно максимальное количество дробных цифр, которые вы собираетесь обработать, вы можете умножить свои исходные значения на подходящую степень 10 и использовать целочисленную арифметику для своих вычислений. Чтобы отобразить значения, вы просто должны вставить десятичную точку в соответствующем месте.
Других решений пока нет …