Променљиве реалног типа служе за представљање вредности реалних бројева, тзв. бројева са покретном тачком, односно зарезом (енгл. floating-point). Разлика између реалних типова float, double и long double је у прецизности тј. опсегу представљања бројева. Постоје:
ТИП | ВЕЛИЧИНА | ОПСЕГ ВРЕДНОСТИ | ПРЕЦИЗНОСТ |
float | 4 бајта | 1.2E-38 – 3.4E+38 | 6 |
double | 8 бајта | 2.3E-308 – 1.7E+308 | 15 |
long double |
10 бајта | 3.4E-4932 – 1.1E+4932 | 19 |
Каже се да променљива float има обичну прецизност, променљива типа double двоструку прецизност, а променљива типа long вишеструку прецизност. Променљивој типа long double засигурно се додељује 8 бајта у меморији, а чешћи је случај да је то 10, 12 или 16 бајта.
Вредности за тип float можемо проверити на следећи начин:
#include <stdio.h> #include <float.h> main() { printf("Velicina je: %d \n", sizeof(float)); printf("Najmanja vrednost je: %E\n", FLT_MIN); printf("Najveca vrednost je: %E\n", FLT_MAX); printf("Broj cifara je: %d\n", FLT_MANT_DIG); printf("Preciznost je: %d\n", FLT_DIG); }
На исти начин можемо проверити вредности за double (DBL) и long double (LDBL).
Реалне променљиве float декларишу се на следећи начин:
float prom_1, prom_2, ... prom_n;
или
float prom_1; float prom_2; ... float prom_n;
На исти начин декларишу се и променљиве типа double и long double.
Задатак: Опишите шта је декларисано у следећем примеру:
float a, b, c; double d; long double e;
У задатку су декларисане реалне променљиве са обичном прецизношћу a, b и c, реална променљива са двоструком прецизношћу d и реална променљива са вишеструком прецизношћу e.
Реалне константе
Реалне константе у програмском језику С могу се писати само у декадном бројном систему. Пишу се са децималном тачком на месту децималног зареза који се код нас иначе користи приликом записа реалних бројева.
За веома мале и веома велике бројеве користи се експоненцијална нотација облика
mEs или mes
где је m мантиса, а s експонент. Мантиса је децимални број који може да има предзнак, целобројни део, децималну тачку и разломљени део. Експонент је увек цео број који може да има предзнак.
ВРЕДНОСТ | ЕКСПОНЕНЦИЈАЛНИ ОБЛИК |
542 | 5.42E+02 |
8. | 8.0E+00 |
3.14159 | 3.14159E+00 |
-.00073 | -7.3E-04 |
Реалне константе су увек мапиране у меморији са двоструком прецизношћу. Ако је потребно да имају обичну прецизност означавају се додавањем слова f или F на крају, а ако је потребно да имају вишеструку прецизност, додавањем слова l или L на крају.
Задатак: Планкова константа је физичка константа која се користи за описивање најмање могуће вредности енергије, једног кванта. Она износи 6.62607·10-34. Запиши дату вредност у експоненцијалном облику.
6.62607E-34
Основне конверзије за реални тип
Симболи конверзије које користимо за испис реалних типова су:
f – користи се и за float и за double
е, Е – користи се и за float и за double (нотација са експонентом)
g – краћи облик од нотације %e и %f
Као и код целобројног типа, спецификаторе добијамо наводећи знак % испред симбола коверзије.
Пример 1. Демонстрираћемо декларацију променљивих, доделу вредности и испис вредности користећи наведене симболе конверзија.
#include <stdio.h> main() { float x; x = 123; printf("x: %f \n", x); printf("x: %E \n", x); printf("x: %g \n", x); }
Као резултат добијамо:
x: 123.000000 x: 1.230000E+02 x: 123 Press any key to continue . . .
Пример 2. Демонстрираћемо декларацију променљивих, доделу вредности, основне аритметичке операције које смо користили и у окружењу за израду алгоритамских шема и на крају испис резултата.
#include <stdio.h> main() { float x, y, a, b, c, d, e; x = 10; y = 3; a = x + y; b = x - y; c = x * y; d = x / y; printf("x + y = %f \n", a); printf("x - y = %f \n", b); printf("x * y = %f \n", c); printf("x / y = %f \n", d); }
Као резултат добијамо:
x + y = 13.000000 x - y = 7.000000 x * y = 30.000000 x / y = 3.333333 Press any key to continue . . .