С ++ поплавковий та подвійний

У цьому підручнику ми дізнаємося про типи даних 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 ++.

Різниця між поплавком та подвійним

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

Примітка: Якщо у вас немає конкретних вимог, завжди використовуйте doubleзамість float, оскільки floatзмінні можуть схильні до помилок при роботі з великими числами.

Приклад 1: плаваючий та подвійний C ++

 #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;

С ++ виводить експоненційні числа і дуже великі числа у форматі, який називається науковим форматом. Змінна 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.

Цікаві статті...