Часто в моем опыте программирования мне нужно принять решение, использовать ли мне float или double для моих реальных чисел. Иногда я иду на поплавок, иногда я иду на двойной, но на самом деле это кажется более субъективным. Если бы мне пришлось встать на защиту моего решения, я бы, вероятно, не привел веских причин.
Когда вы используете float и когда вы используете double? Всегда ли вы используете double, только при наличии ограничений памяти вы идете на float? Или вы используете всегда float, если требование точности не требует двойного? Есть ли существенные различия в вычислительной сложности базовой арифметики между float и double? Каковы плюсы и минусы использования float или double? И ты даже использовал длинный двойной?
c++
c
floating-point
numbers
Якуб Заверка
источник
источник
Ответы:
Выбор по умолчанию для типа с плавающей точкой должен быть
double
. Это также тип, который вы получаете с литералами с плавающей точкой без суффикса или (в C) стандартными функциями, которые работают с числами с плавающей точкой (напримерexp
,sin
и т. Д.).float
следует использовать только в том случае, если вам нужно оперировать множеством чисел с плавающей точкой (думайте в порядке тысяч или более), и анализ алгоритма показал, что уменьшенный диапазон и точность не представляют проблемы.long double
может использоваться, если вам нужен больший диапазон или точность, чемdouble
, и если это обеспечивает это на вашей целевой платформе.Таким образом,
float
иlong double
должны быть зарезервированы для использования специалистами,double
для "повседневного" использования.источник
float
(и иногда с половинной точностью), потому что ни человеческий глаз, ни дисплей, ни цветовая система не обладают такой большой точностью , Этот совет применим, скажем, к OpenGL и т. Д. Этот дополнительный совет не относится к медицинским изображениям, которые предъявляют более строгие требования к точности.В кодах, ориентированных на современные компьютеры, редко встречается причина использовать float вместо double. Дополнительная точность снижает (но не исключает) вероятность ошибок округления или других неточностей, вызывающих проблемы.
Основные причины, по которым я могу использовать float:
Таким образом, в основном, двойным является путь, если у вас нет аппаратных ограничений или если анализ не показал, что хранение чисел с двойной точностью вносит значительный вклад в использование памяти.
источник
Используйте
double
для всех ваших расчетов и временных переменных. Используйте,float
когда вам нужно поддерживать массив чисел -float[]
(если точность достаточна), и вы имеете дело с более чем десятками тысячfloat
чисел.Многие / большинство математических функций или операторов конвертируют / возвращают
double
, и вы не хотите приводить числа обратно кfloat
любым промежуточным шагам.Например, если у вас есть 100 000 номеров из файла или потока и вам нужно их отсортировать, введите числа в
float[]
.источник
Некоторые платформы (ARM Cortex-M2, Cortex-M4 и т. Д.) Не поддерживают double (это всегда можно проверить в справочном руководстве по вашему процессору. Если нет предупреждений или ошибок компиляции, это не означает, что код является оптимальным. двойной можно подражать.) Вот почему вам может понадобиться придерживаться int или float .
Если это не так, я бы использовал double .
Вы можете проверить знаменитую статью Д. Голдберга («Что должен знать каждый компьютерщик об арифметике с плавающей точкой»). Вы должны дважды подумать, прежде чем использовать арифметику с плавающей точкой. Существует довольно большой шанс, что они не нужны вообще в вашей конкретной ситуации.
http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf
источник
Для реальных проблем порог выборки ваших данных важен при ответе на этот вопрос. Аналогично, уровень шума также важен. Если какой-либо из них будет превышен при выборе типа данных, увеличение точности не принесет никакой пользы.
Большинство реальных сэмплеров ограничены 24-битными ЦАП. Предполагается, что 32 бита точности в реальных вычислениях должны быть адекватны, если значение составляет 24 бита.
Двойная точность достигается за счет 2-кратной памяти. Поэтому ограничение использования двойных чисел над числами с плавающей запятой может резко сократить объем памяти / пропускную способность работающих приложений.
источник
Выбор того, какую переменную использовать между float и double, зависит от точности требуемых данных. Если требуется, чтобы ответ имел незначительную разницу с фактическим ответом, количество требуемых десятичных разрядов будет много, поэтому будет требоваться использование этого двойного числа. Поплавок отрежет часть десятичных разрядов, что снизит точность.
источник
Обычно я использую
float
тип, когда мне не нужна большая точность - например, для денег - что неправильно, но я привык делать неправильно.С другой стороны, я использую,
double
когда мне нужно больше точности, например, для сложных математических алгоритмов.Стандарт C99 говорит об этом:
Я никогда не использовал
long double
, но я не так часто использую C / C ++. Обычно я использую динамически типизированные языки, такие как Python, где вам не нужно заботиться о типах.Для получения дополнительной информации о Double vs Float , смотрите этот вопрос в SO .
источник
Decimal
- это тип с плавающей запятой, и, как правило, это хороший выбор для расчета денег.