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