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