C ++ плаващ и двоен

В този урок ще научим за плаващите и двойните типове данни с помощта на примери. Ще разгледаме и някои от основните разлики между тях и кога да ги използваме.

В 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 ++ 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.

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