(Примечание: эта статья предполагает, что читатели знают об основах информатики)
Многие начинающие программисты / студенты, обучающиеся информатике, задают часто задаваемые вопросы, относящиеся к конкретной области информатики, которую они изучают. Большинство курсов для начинающих начинаются с тем системы счисления, которая используется в современных компьютерах, включая двоичный, десятичная дробь, восьмеричный и шестнадцатеричный система. Это форматы номеров компьютеров, которые являются внутренними представлениями числовых значений в компьютерах (или калькуляторах и любых других типах цифровых компьютеров). Эти значения хранятся в виде «группировки битов».
Как мы знаем, компьютеры представляют данные в виде набора двоичных цифр (т. Е. В комбинации 1s и 0s, такие как, 1111 представляет 15 в десятичной системе) имеет смысл рассказать о различных числовых форматах, которые используются для представления динамического диапазона значений, поскольку они составляют основные блоки обработки вычислений / чисел в любой операции. Как только система счисления определена в классе (часто плохо), у учеников возникает желание перейти на разные числовые форматы одного и того же типа (т.е.., арифметика с плавающей точкой), которые имеют определенную точность и числовой диапазон. Таким образом, они вынуждены изучать нюансы между определенными типами. Два наиболее часто используемых типа данных терка и двойной, и в то время как они нацелены на одинаковые потребности (т.е.., арифметика с плавающей точкой), есть некоторое различие в их внутреннем представлении и общем влиянии на расчеты в программе. К сожалению, многие программисты упускают нюансы между типами данных Flat и Double и в конечном итоге используют их там, где их не следует использовать в первую очередь. В конечном итоге приводит к просчетам в других частях программы.
В этой статье я расскажу вам разницу между float и double с примерами кода на языке Си. Давайте начнем!
Float и Double - это представления данных, которые используются для арифметических операций с плавающей запятой, представьте десятичные числа, которые вы вычисляете в классе математики, например:, 20,123, 16,23, 10,2, и т.д., они не являются целыми числами (т.е.., 2, 5, 15, и т. д.), поэтому они требуют рассмотрения дробей в двоичном виде. Как результирующие десятичные числа (т.е.., 20,123, 16,23, и т. д.) не могут быть легко представлены в обычном двоичном формате (т. е. целое число). Основное различие между Float и Double заключается в том, что первый тип данных с плавающей запятой одинарной (32-битной), а второй - тип данных с плавающей запятой двойной точности (64-битной). Double называется «double», потому что это в основном версия Float с двойной точностью. Если вы вычисляете огромное количество (представьте тысячи нулей в числе), то неточности будут меньше в Double, и вы не потеряете много точности.
Лучше уточнить, используя примеры кода. Ниже приведена операция над Float и Double с помощью математических функций, предоставляемых на языке Си:
#включают
int main ()
число с плавающей запятой1 = 1.f / 82;
float num2 = 0;
для (int i = 0; i < 738; ++i)
num2 + = num1;
printf («%. 7g \ n», num2);
двойное число 3 = 1,0 / 82;
double num4 = 0;
для (int i = 0; i < 738; ++i)
num4 + = num3;
printf («%. 15g \ n», num4);
GetChar ();
Он печатает следующее:
9.000031
+8,99999999999983
Здесь вы можете видеть, что небольшая разница в точности Float и Double дает совершенно другой ответ, хотя Double кажется более точным, чем Float.
Ниже приведен пример функции sqrt () в C:
#включают
#включают
int main ()
float num1 = sqrt (2382719676512365.1230112312312312);
double num2 = sqrt (2382719676512365.1230112312312312);
printf («% f \ n», num1);
printf («% f \ n», num2);
GetChar ();
Это дает следующий вывод:
48813108.000000
48813109.678778
Здесь вы можете видеть, что ответ в Double имеет лучшую точность.
В общем, лучше использовать Double для арифметики с плавающей точкой, поскольку несколько стандартных математических функций в C работают на Double, а современные компьютеры чрезвычайно быстры и эффективны для вычисления Double с плавающей точкой. Это приводит к уменьшению необходимости использовать Float, если вам не нужно работать с большим числом чисел с плавающей запятой (например, большие массивы с тысячами нулей) или вы работаете в системе, которая не поддерживает двойные числа. точность с плавающей запятой, так как многие графические процессоры, маломощные устройства и некоторые платформы (ARM Cortex-M2, Cortex-M4 и т. д.) еще не поддерживают Double, тогда вам следует использовать Float. Кроме того, следует помнить, что некоторые графические процессоры / процессоры работают лучше / эффективнее при обработке чисел типа Float, например, при расчете векторов / матриц, поэтому вам, возможно, придется обратиться к руководству / документации по спецификации аппаратного обеспечения, чтобы лучше решить, какой из них следует использовать. для конкретной машины.
Редко есть причина использовать Float вместо Double в коде, предназначенном для современных компьютеров. Дополнительная точность в Double снижает, но не исключает вероятность округления ошибок или других неточностей, которые могут вызвать проблемы в других частях программы. Многие математические функции или операторы конвертируют и возвращают Double, поэтому вам не нужно приводить числа обратно к Float, так как это может потерять точность. Для подробного анализа арифметики с плавающей точкой я настоятельно рекомендую вам прочитать эту замечательную статью (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html).
Итак ... в двух словах:
Места, где вы должны использовать Float:
В этой статье я подчеркнул разницу между Float и Double, и какой из них следует использовать в определенных местах. Можно утверждать, что лучше использовать Double в большинстве мест вслепую, особенно если вы ориентируетесь на современные компьютеры, так как шансы на низкую эффективность из-за использования двойной арифметики с плавающей точкой весьма маловероятны. Если у вас есть какие-либо вопросы, то вы можете задать их в разделе комментариев ниже!