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

Реални тип података служи за представљање реалних бројева, који се у програмском језику C називају бројевима са покретном тачком (енгл. floating point) - а не запетом као у математици. Бројевима са покретном тачком може да претходи знак + или знак -, где се знак + може изоставити уколико је број позитиван. У рачунарским наукама бројеви са покретном тачком приближно представљају реалне бројеве користећи негативан или ненегативан знак испред целог броја фиксне прецизности помножен целобројним експонентом фиксне основе. На пример:

\[-12.345=-12345\times{10^{-3}}\]

У изразу изнад, са леве стране налази се негативан реалан број, а са десне:

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