Реални тип података¶
Реални тип података служи за представљање реалних бројева, који се у
програмском језику C називају бројевима са покретном тачком
(енгл. floating point) - а не запетом као у математици. Бројевима са
покретном тачком може да претходи знак +
или знак -
, где се знак +
може
изоставити уколико је број позитиван. У рачунарским наукама бројеви са
покретном тачком приближно представљају реалне бројеве користећи негативан или
ненегативан знак испред целог броја фиксне прецизности помножен целобројним
експонентом фиксне основе. На пример:
У изразу изнад, са леве стране налази се негативан реалан број, а са десне:
\(-\) представља знак (енгл. sign),
\(12345\) представља сигнификанд или мантису (енгл. significand, mantissa),
\(10\) представља основу (енгл. base, radix).
\(-3\) представља експонент (енгл. exponent) и
Израз „покретна тачка” односи се на чињеницу да се тачка (енгл. radix point) креће између цифара броја.
Запис бројева са покретном тачком¶
У програмском језику C бројеве са покретном тачком можеш записати на више
начина. У децималној нотацији бројеве са покретном тачком пишеш наводећи
знак, целобројни део, децималну тачку и разломљени део. На пример, број \(1.23\)
у децималној нотацији записао би као +1.23
или као 1.23
, односно број
\(-1.23\) као -1.23
.
Ако је целобројни део броја са покретном тачком једнак нули, а разломљени није,
онда се та нула може изоставити. На пример, број \(0.23\) можеш записати као
.23
, односно, број \(-0.23\) можеш записати као -.23
.
С друге стране, ако је целобројни део броја са покретном тачком различит од
нуле, а разломљени део једнак нули, онда се та нула може изоставити. На пример,
број \(3.0\) можеш записати као 3.
, односно, број \(-3.0\) можеш записати као
-3.
.
Други начин записа бројева са покретном тачком у програмском језику C је запис
у научној нотацији, где наводиш мантису, слово е
или E
које представља
основу и експонент. Овај је начин погодан за запис бројева са покретном тачком
који имају мали број значајних цифара. За овај запис исто важи да се знак +
може изоставити испред мантисе или експонента уколико су мантиса или експонент
позитивни бројеви.
На пример, број \(0.0000000012\) можеш записати као 1.2e-9
или 1.2E-9
,
односно, број \(1200000000\) можеш записати као 1.2e9
или 1.2E9
.
Прецизност¶
У програмском језику C опсег могућих вредности и прецизност бројева са покретном тачком зависи од декларације, а често и од компајлера. Пошто нису доступни модификатори, доступно је више различитих реалних типова:
Број са покретном тачком типа
float
има једноструку прецизност и заузима \(4B\) меморијског простора. \(1b\) резервисан је за знак, \(8b\) за експонент са основом 2 и \(23b\) за сигнификанд.Број са покретном тачком типа
double
има двоструку прецизност и заузима \(8B\) меморијског простора. \(1b\) резервисан је за знак, \(11b\) за експонент са основом 2 и \(52b\) за сигнификанд.Број са покретном тачком типа
long double
има проширену прецизност и заузима \(10B\), \(12B\) или \(16B\) меморијског простора у зависности од комплајера. Изузетак је баш Microsoft C/C++ компајлер који ћеш користити у овом предмету, где је типlong double
идентичан типуdouble
, што значи да број са покретном тачком типаlong double
заузима \(8B\), меморијског простора.Број са покретном тачком може имати четвороструку прецизност ако заузима \(16B\) меморијског простора. Имплементација таквог типа постоји у новијим верзијама неких C компајлера. Пошто у задацима ретко има потребе за бројевима са покретном тачком проширене или четвороструке прецизности, њих на даље нећеш користити.
Уколико желиш да провериш минималне и максималне вредности које може да има податак реалног типа на твом рачунарском систему са C компајлером који ти користиш, то можеш урадити извршавањем програма датог у прилогу.