Во-первых, никогда не используйте числа с плавающей запятой или двойные числа, если вы хотите точно представлять десятичные значения - используйте целочисленные типы (int, long и т. Д.) Или десятичные (это просто целочисленный тип с коэффициентом масштабирования). Числа с плавающей запятой и числа с двойными числами преобразуются внутренне в экспоненциальное представление в базе 2, а числа, представленные точно в экспоненциальном представлении в базе 10, в общем случае не могут быть представлены точно. (Например, число 10 представлено только приблизительно с плавающей или двойной).
Во-вторых, с точки зрения точности это зависит от того, что вам нужно. Я не согласен с вашим мнением, что никогда не бывает расчетов, где точность не имеет значения. Обычно у вас есть конкретная потребность, чтобы ваш конечный результат был точным, 3 цифры. Не имеет смысла искать максимально возможную точность, если ваши входные данные имеют только ограниченную точность - скажем, вы весите около 5 г муки, а ваша шкала имеет точность только до 0,5 г. Тем не менее, промежуточные вычисления обычно выигрывают от более высокой точности, но что-то более важное, чем высокая точность, если довольно часто скорость.
В-третьих, при выполнении серии вычислений, скажем, в цикле, вам нужно знать, что вы делаете, когда имеете дело с неточными вычислениями - вы будете сталкиваться с ошибками округления, и некоторые алгоритмы могут не прийти к ответу на какой-либо степень точности. Детальное понимание этих вопросов может потребовать курса численного анализа. Это не зависит от того, выберете ли вы плавающие или двойные для ваших расчетов.
Для вычислений с плавающей запятой я обычно использую двойные, поскольку они более общие и более быстрые, чем плавающие. Однако число с плавающей запятой меньше, и если вам нужно хранить много из них, они могут предотвратить проблему с производительностью из-за пропадания кэша.
Насколько мне известно, обработка с плавающей запятой поддерживается аппаратно для двойных чисел, но не для чисел с плавающей запятой, поэтому при использовании чисел с плавающей запятой происходит преобразование в двойную. Однако некоторые подпрограммы будут останавливаться раньше при итеративном вычислении значения при передаче значения с плавающей запятой, поскольку это подразумевает, что вам нужна точность порядка 8 цифр против около 16 для двойных чисел.