Posted By: pivson (Pijte pivo, je zdrave !!!) on 'CZprogram'
Title:     Re: Zaokrouhlovani cisla typu Extended
Date:      Fri May 10 20:36:04 2002

> Hmm?
> takze, vyjadreni 5ky ve floatu
> a) prevedeme na binarni cislo. 5ka = 101
> b) zkonvertime na desetine binarni cislo
>    5ka = 101b = 1.01 * 2^2
> c) znormalizujeme, tj. zanedbame uvodni 1cku, mame
>    .01 * 2^2
> d) exponent se pro float vyjadruje jako posunuti vuci 127 (neni tam tradicni
>    znamenko), tedy nas exponent 2 se ulozi jako 129 = 0x81
>    mantisa se nam ulozi jako 010.....0b = 0x200000 (mame celkem 23 bitu)
Dalsi co mne bere za slovo. Vujadri mi treba (viz predhozi post)  1.123.

> No a kdyz se to posklada vse dohromady dostaneme
> 0<<31 (sign)  +
> 0x81 << 23 (exponent) +
> 0x200000
> 
> coz je dohromady 0x40a0 0000
> 
> Testovaci programek
> float vQ = 5;
> DWORD nQ = *reinterpret_cast<DWORD*>(&vQ);
> 
> nQ = 0x40a00000
> 
> Me to teda pripadne zcela pruhledne...
Nepopiram. Taky by ti sedel test, pokud bys mel

a=5;
b=5;
c=a+b;

if (c==10)
   ...

Testovaci programek (vypada stejne jako vyse) sedi. 

a:  00 00 00 00 00 00 18 40
b:  00 00 00 00 00 00 18 40
c:  00 00 00 00 00 00 24 40
10: 00 00 00 00 00 00 24 40

Tady neni co by nemelo sedet.

Nutno dodat jednu vec, pokud je zaple zaokrouhlovani, tak pri vypoctu se muze 
chyba zpusobena jinou soustavou vyrovnat (a taky se vyrovna). To (odkaz na 
puvodni post) muze menit vysledek u toho testu.

Pokud mam 1.99999999999999 (resp. neco, kde chyba vznikal pri konverzi 
soustav) a sectu to s jinym cislem (uz treba presnym - napr. 2) tak vysledek 
pravdepodobne nebude 3.99999999999999999 ale muze byt 4.
 

> Myslim, ze prevadet to zpet na desetina cisla je ponekud matouci...
> Nejmensi mantisa je 1.0000000 (binarne), jenze jak chces binarni mantisu
> (vztazenou na 2kovy exponent) prevest na desitkovou mantisu vztazenou
> k desitkovemu exponentu?
Ted presne nerozumim. Tvrdis, ze FPU dela s cislem ve tvaru x=m*10^e ?

Priklad: 5000 -> 00 00 00 00 00 88 B3 40

5000=0.6103515625*(2*2*2*2*2*2*2*2*2*2*2*2*2) nebo 2^13...

Z cisla je mozno vypitvat, ze:

sign=0
e   =$40b -> 1035 (bias format) -> 13 (souhlasi, pro 10ku by to muselo bejt 4)
m   =...

Myslim ze je nazorne videt, ze cislo se uklada ve tvaru m*2^e a ne 10 [a odtut 
prameni zakladni chyba, ke ktery se nabalujou dalsi] 

Co se tyce prevodu, tech je spousta. Doporucuju IEEE 754 k prostudovani, 
pripadne kazda lepsi kniha o PC architekture (kde je FPU) urcite naznacuje. A 
jeden z prevodu (aby byla cisla jednoznacna) je prave 'zobrazeni s 
normalizovaniou mantisou' a to je ono zminene <0.5-1) (rat: spokojen ? :)

 

Pivson I a posledni, z bozi vule pivar

    A co budou delat cesi ???
                                     Deme na pivo !

Search the boards