Stranica 1 od 1

Približni realni brojevi – zapis u pokretnom zarezu

PostPoslato: Četvrtak, 23. Oktobar 2014, 17:07
od Miladin Jovic
Ako može pojašnjenje, zašto mantisa najmanjeg broja u notaciji pokretni zarez sa binarno-kodiranom heksadekadnom mantisom ( negde ih zovu i frakcija) smeštena u [inlmath]32[/inlmath] bita izgleda ovako: [inlmath]\underbrace{00010\cdots 0}_{24}[/inlmath].
Jasno mi je ta zapis znaka i za zapis eksponenta.
I još jedno pitanje:
Kako onda možemo negativne brojeve napisati u navedenoj notaciji, ako znamo interval brojeva koji se mogu napisati u pokretnom zarezu [inlmath]x\in\left[16^{-65},\:{\left(1-16^{-6}\right)}\cdot 16^{63}\right][/inlmath]?

Re: Približni realni brojevi – zapis u pokretnom zarezu

PostPoslato: Četvrtak, 23. Oktobar 2014, 21:26
od ubavic
Koliko vidim, nešto nije u redu. Pokretni zapis najčešće koristi IEEE 754 standard. Po tom standardu definisano je više float formata, među kojima je i "single precision" ("float" u C jeziku) koji zauzima [inlmath]32[/inlmath] bita (o kojem ti i pitaš). Single precision ima ovakvu strukturu (naravno, umesto nula mogu stajati i jedinice):
[dispmath]{\color{red}\underbrace{0}_{\mathrm{znak}}}\quad{\color{blue}\underbrace{0\;0\;0\;0\;0\;0\;0\;0}_{\mathrm{eksponent\quad 8\:bitova}}}\quad{\color{green}\underbrace{0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0}_{\mathrm{mantisa\quad 23\:bita}}}[/dispmath]
Vrednost float broja je data formulom:
[dispmath]\mathrm{float}=(-1)^{\mathrm{znak}}\left(1+\sum\limits_{i=1}^{23}b_{23-i}2^{-i}\right)\times 2^{(\mathrm{eksponent}-127)}[/dispmath]
[inlmath]31[/inlmath]. bit je rezervisan za znak. Dakle, tako se u floatu određuje znak broja, što i vidimo iz gornje jednakosti. Bitovi od [inlmath]30[/inlmath] do [inlmath]23[/inlmath] su rezervisani za eksponent ([inlmath]8[/inlmath] bitova). Eksponent se može zapisati sa znakom (komplement dvojke) ili bez znaka. U IEEE 754 standardu eksponent se zapisuje bez znaka (zbog toga se u jednačini oduzima [inlmath]127[/inlmath] od njega). Pošto ima [inlmath]8[/inlmath] bitova, on se često predstavlja u hexadecimalnom sistemu. Bitovi od bita [inlmath]22[/inlmath] do bita [inlmath]0[/inlmath] služe za mantisu (frakcija, significand). Iako ima ukupno [inlmath]23[/inlmath] bita, preciznost frakcije iznosi [inlmath]24[/inlmath] bita, što mu u decimalnom zapisu dođe [inlmath]\log_{10}\left(2^{24}\right)\approx 7.225[/inlmath] decimalna mesta (to je zbog toga što se broj normalizuje, tj. pretvara u oblik [inlmath]1.b_{23}b_{22}b_{21}\dots b_{0}[/inlmath], pa se onda jedinica odbacuje). U zavisnosti od kombinacije mantise ([inlmath]m[/inlmath]) i eksponenta ([inlmath]e[/inlmath]), postoji pet slučajeva:
[inlmath]1)\;e=00_{\mathrm{H}}\quad m=0[/inlmath] broj se interpretira kao nula.
[inlmath]2)\;e=00_{\mathrm{H}}\quad m\neq 0[/inlmath] broj se interpretira kao denormalni broj i računa se po formuli: [inlmath](-1)^{\mathrm{znak}}\left(\sum\limits b_{23-i}2^{-i}\right)\times 2^{-126}[/inlmath]
[inlmath]3)\;01_{\mathrm{H}}\leq e\leq\mathrm{FE}_{\mathrm{H}}[/inlmath] broj se računa po goreopisanoj formuli: [inlmath](-1)^{\mathrm{znak}}\left(1+\sum\limits b_{23-i}2^{-i}\right)\times 2^{(\mathrm{eksponent}-127)}[/inlmath]
[inlmath]4)\;e=\mathrm{FF}_{\mathrm{H}}\quad m=0[/inlmath] broj se interpretira kao beskonačnost.
[inlmath]5)\;e=\mathrm{FF}_{\mathrm{H}}\quad m\neq 0[/inlmath] broj se interpretira kao [inlmath]\mathrm{NaN}[/inlmath]

Opseg [inlmath]32[/inlmath]-bitnog float broja je sledeći:
Denormalizovani broj najbliži nuli je: [inlmath]\pm 2^{-149}\approx\pm 1.40130\times 10^{-45}[/inlmath] i zapisan je [inlmath]0\;\;0000\;0000\;\;000\;0000\;0000\;0000\;0000\;0001[/inlmath]
Normalizovani broj najbliži nuli je: [inlmath]\pm 2^{-126}\approx\pm 1.17549\times 10^{-38}[/inlmath] i zapisan je [inlmath]0\;\;0000\;0001\;\; 000\;0000\;0000\;0000\;0000\;0000[/inlmath]
Normalizovani broj najudaljeniji od nule je: [inlmath]\pm\left(1−2^{−24}\right)2^{128}\approx\pm 3.40282\times 10^{38}[/inlmath] i zapisan je: [inlmath]0\;\;1111\;1110\;\;111\;1111\;1111\;1111\;1111\;1111[/inlmath]
U sva tri gornja primera sam uzeo da je [inlmath]31[/inlmath]. bit jednak [inlmath]0[/inlmath], tj. da je broj pozitivan. Isto se odnosi i na negativne brojeve.

Na ovoj stranici se nalazi veoma lep binarni kalkulator pokretnog zareza.