Реални тип података

Променљиве реалног типа служе за представљање вредности реалних бројева, тзв. бројева са покретном тачком, односно зарезом (енгл. 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 . . .