C ++ с плавающей запятой и двойной

В этом руководстве мы узнаем о типах данных float и double с помощью примеров. Мы также рассмотрим некоторые ключевые различия между ними и когда их использовать.

В C ++, так floatи doubleтипы данных используются для значений с плавающей точкой. Числа с плавающей запятой используются для десятичных и экспоненциальных значений. Например,

 // creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5

Мы должны добавить суффикс fили Fв конце floatзначения. Это связано с тем, что компилятор интерпретирует десятичные значения без суффикса как double.

Рассмотрим этот код.

 float a = 5.6;

Здесь мы присвоили doubleзначение floatпеременной.

В этом случае 5.6 преобразуется floatкомпилятором автоматически перед присвоением переменной a. Это может привести к потере данных. Чтобы узнать больше, посетите Преобразование типов C ++.

Разница между float и double

плавать двойной
Размер: 4 байта Размер: 8 байт
Точность: как правило, точность до 7 десятичных знаков. Точность: как правило, точность до 15 десятичных знаков.
Пример: 3.56f и 3e5fт. Д. Пример: 3.56 и 3e5т. Д.

Примечание. Если у вас нет особых требований, всегда используйте doubleвместо float, поскольку floatпеременные могут приводить к ошибкам при работе с большими числами.

Пример 1: C ++ float и double

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )

Вывод

 Число двойного типа = 3,91235 Число типа с плавающей запятой = 3,91235

Примечание: компилятор, используемый для этого примера (компилятор MinGW), допускает использование 6 цифр. Итак, наши значения переменных были округлены и усечены компилятором до 6 цифр.

setprecision () для указания десятичных точек

Мы можем указать количество десятичных знаков для печати coutс помощью setprecision()функции.

Эта функция определена в iomanipфайле заголовка, который обозначает манипуляции с вводом / выводом .

Пример 2: Использование setprecision () для чисел с плавающей запятой

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )

Вывод

 Число двойного типа = 3,912348239293 Число типа с плавающей запятой = 3,912348270416

Как видно из приведенного выше примера, мы указали точность до 13 цифр.

 cout << setprecision(13);

Значение с плавающей запятой, которое мы присвоили нашим переменным, также состоит из 13 цифр.

Однако, поскольку floatточность составляет всего 7 цифр, он показывает значения мусора после превышения его точности.

Наша doubleпеременная показывает правильное число, потому что оно имеет точность 15 цифр, а само число состоит из 13 цифр.

В качестве альтернативы мы можем указать различную точность для разных переменных при их печати.

Пример 3: Различная точность для разных переменных

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0; )

Вывод

 Число двойного типа = 3,9123482393 Число типа с плавающей запятой = 3,912348

Из приведенной выше программы мы видим, что мы установили два разных значения точности для floatи double.

В обоих случаях точность меньше реальных цифр числа. Таким образом, последняя цифра округляется, а остальная часть усекается.

Примечание: если мы укажем точность больше, чем точность самого типа данных (7 для floatи 15 для double), то компилятор выдаст нам значения мусора после того, как предел точности будет превышен, как можно увидеть в floatвыводе в примере 2 .

Работа с экспоненциальными числами

Как уже упоминались выше, floatи doubleтакже может быть использован для представления экспоненциальных чисел . Например,

 // ex = 325 X (10 25) double ex = 325E25;

C ++ выводит экспоненциальные числа и очень большие числа в формате, называемом научным форматом. Переменная ex будет выводиться в этом формате по умолчанию, так как это очень большое число.

Чтобы заставить C ++ отображать наши числа с плавающей запятой в scientificформате независимо от размера числа, мы используем спецификатор формата scientificвнутри cout.

 double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;

В дополнение к этому существует еще один описатель формата, известный как fixed, который отображает числа с плавающей запятой в десятичном формате.

Это похоже на отображение чисел с плавающей запятой только с использованием coutбез setprecision(), за исключением того факта, что fixedотображаются числа до 6 десятичных знаков.

С другой стороны, только использование coutотображает цифры в соответствии с конкретным компилятором (всего 6 цифр в случае компилятора MinGW , включая цифры перед десятичной точкой).

Пример 4: фиксированный и научный форматы

 #include #include using namespace std; int main() ( // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "Displaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0; )

Вывод

 Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float Type Number 2 = 3.250000e+004

long double

Apart from float and double, there is another data type that can store floating-point numbers. This is known as long double.

It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double, though most of the time, it is greater than that of double.

long double values should end with L. For example,

 // declaring a long double variable long double num_ldb = 2.569L;

Примечание. C ++ поддерживает типы данных с плавающей запятой float, doubleи long double. Нет long float.

Интересные статьи...