Ц ++ плутајуће и двоструко

У овом упутству ћемо научити о флоат и доубле типовима података уз помоћ примера. Такође ћемо размотрити неке од кључних разлика између њих и када их користити.

У Ц ++, и и 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.6float пре него што га додели променљивој а. То може довести до губитка података. Да бисте сазнали више, посетите Ц ++ претворбу типова.

Разлика између флоат и доубле

пловак двоструко
Величина: 4 бајта Величина: 8 бајтова
Прецизност: Генерално, прецизност 7 децималних цифара Прецизност: Генерално, прецизност 15 децималних цифара
Пример: 3.56f , 3e5fетц. Пример: 3.56 , 3e5етц.

Напомена: Осим ако немате одређени захтев, увек користите doubleуместо float, јер floatпроменљиве могу бити склоне увођењу грешака у раду са великим бројевима.

Пример 1: Ц ++ флоат и доубле

 #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

Напомена: Компајлер коришћен за овај пример (компајлер МинГВ) дозвољава 6 цифара. Дакле, наше променљиве вредности су заокружене и скраћене на 6 цифара од стране преводилаца.

сетпрецисион () за одређивање децималних поена

coutПомоћу setprecision()функције можемо одредити број децималних места за испис .

Ова функција је дефинисана у iomanipзаглавној датотеци, која представља манипулацију улазом / излазом .

Пример 2: Коришћење сетпрецисион () за бројеве са помичном зарезом

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

Ц ++ даје експоненцијалне бројеве и врло велике бројеве у формату који се назива научни формат. Променљива ек ће се подразумевано приказивати у овом формату, јер је реч о веома великом броју.

Да бисмо приморали Ц ++ да приказује бројеве с помичном зарезом у 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 цифара у случају компајлера МинГВ , укључујући цифре испред децималне тачке).

Пример 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;

Напомена: Типови података са покретном тачком које подржава Ц ++ су float, doubleи long double. Не постоји long float.

Занимљиви Чланци...