Боюсь, что «самый точный результат» мало что значит.Ни одно конечное представление не может точно представить все действительные числа;насколько точным может быть представление, зависит от размера типа и его внутреннего представления.В большинстве реализаций double
даст точность около 17 десятичных цифр, что, как правило, на несколько порядков точнее, чем ввод;для одного умножения или деления обычно вполне подходит double
.(Проблемы возникают с сложением и вычитанием, когда разница между двумя значениями чрезвычайно велика.) Существуют пакеты, которые обеспечивают большую точность (BigDecimal
, BigFloat
и т. П.), Но они никогда не бывают точными: в конце концов, точностьограничено объемом памяти, который вы готовы позволить им использовать.Они также намного медленнее, чем double
, и, как правило, (немного) сложнее в правильном использовании (поскольку у них больше опций, например, какой точности вы хотите).Единственный реальный ответ на ваш вопрос - другой вопрос: сколько точности вам нужно?И для какой последовательности операций?Ошибки округления накапливаются, поэтому, хотя double
может быть достаточно для одного деления, оно может вызвать проблемы, если наивно использовать его для итерационных процедур.Хотя в таких случаях решение обычно состоит не в том, чтобы повысить точность, а в том, чтобы изменить алгоритм таким образом, чтобы избежать проблем.Если double
дает вам необходимую точность, используйте ее вместо любого расширенного типа.Если это не так, и у вас нет выбора, выберите одну из существующих библиотек произвольной точности, например GMP.
(У вас также может возникнуть проблема с обработкой округления.Например, для целей бухгалтерского учета в большинстве юрисдикций действуют очень строгие законы, касающиеся округления монетарных значений, а их правила основаны на десятичной арифметике. В таких случаях вам потребуется числовой тип, который выполняет десятичную арифметику, чтобы округление соответствовалово всех случаях.)