Posted By: pivson (Pijte pivo, je zdrave !!!) on 'CZprogram'
Title: Re: Zaokrouhlovani cisla typu Extended
Date: Fri May 10 15:10:24 2002
> Hm, jo. Souhlas. Ale nepresnosti nejnizsiho bitu mantisy, ke ktere se pri
> "normalnim" zpracovani v pascalu nedostanes. Nebo ano? At tak nebo onak,
Nejde jen o neprenost posledniho bitu, ale kdyz mas siclo '5' tak to neni
vyjadreno jako '5' a '10^1' v exponentu (binarne). Nejde tedy jen o nejmensi
bit, ale o rozdilnou interpretaci. Konkretne (opet IEEE754, Intel)
Cislo ma 3 casti:
mantisu
exponent
sign
Je jedno jak je co dlouhy (pro 80 bitu je to 64/15/1).
Vynecham to, ze nektery kombinace tvori specialni cisla (ala nekonecko,
zaporny nekonecne a pod) a ze se ridi podle nastaveni FPU (treba rozklisovani
zapornyho a kladnyho nekonecna) a ze nima jdou provadet nektery ukony. Abysme
se dostali k jadru veci, v zasade jsou normlizovana a denormalizovana cisla.
Normalizovany cislo vypada 'mantisa * 2^exponent'
Je to z ciste matematickych duvodu (desitkova soustava je pro pocitani dost
nevhodna :o) [tedy vsimni si, neni tu nic o m*10^exp)
Napises li tedy 5, nebude to ulozeno jako binarne 0.5 * 10^1 ale jako neco
uplne jinyho. __PROTO__ zde vznika urcita nepresnost uz jen vlozenim cisla.
Vyjadrim-li se doslova, pak konkretne 5ku FPU _NEDOKAZE_ vyjadrit jako
'absolutni' hodnotu, vzdy se tomu bude 'jen' priblizovat.
A to jeste u normalizovanyho cisla je mantisa mezi 0.5-1.0.
Je to tedy dost rozdilny od nasich predstav v desitkovy aritmetice.
Jen podotykam, ze FPU to dela JEN z duvodu rychlejsiho pocitani. Matematickou
teorii okolo toho znam jen trochu (nejsem matematik :o) nicmene, pocitani s
cislama v tomto formatu je 'celkem' jednoducha vec [neco jinyho je matika
okolo]. Narozdil on formatu, na kterej jsme my zvykli. Je okolo toho fakt
docela slusna teorie :o)
Jdu se najist a pak dopisu zbytek...
> nemuzu proste od sebe odecist dve cisla a porovnat s konstantou, protoze mi
> tam porad bude strasit ten exponent, ne? Navic kdyz porovnavam nejaka cisla,
> byva to po serii vypoctu, ktere kazdy sam o sobe znamenaji dalsi ztratu
> presnosti. Jeste stesti, ze test floatu na rovnost skoro nikdy nepotrebuju a
> vystacim si s nerovnostma. Vzpominky na skolu uz se vynoruji tezko :-)
Pletes jsem 2 veci...
Jedna vec je NEPRESNOST vnikla pri vypoctu (ta se IGNORUJE - je zavisla na
konkretnim algoritmu, poradi a ja nevim cem jeste). Nemuzes nadefinvoat
'konstantu' ktera ti rekne 'ted je to jeste dobry'. To jde jedine pro
KONKRETNI vec.
A pak je tu druha neprest, na kteru jsem poukazoval od zacatku, ale byla
vesele ignorovana. A to je NEPRESNOST rozdilnym vyjadrenim cisla.
Nebylo, pokud ty napises treba
10000000000000000000000000000000000000000000000.000000000
Tak FPU to bdue interne videt jako
10000000000000000000000000000000000000000000000.0000000001232198536478957345..
Kdyz to reknu jinak, at je cislo VELKY nebo MALI - vzdy se bere ABS(a-b) a to
z toho duvodu aby se zjistil ROZDIL. Absolutni rozdil ve vyjadreni techto
cisel. Jeli rozdil mensi, nez 'nejmensi krok po kterym je FPU schopny
'korigovat cislo' pak jsou si ty cisla rovny. NE protoze je zde chyba ve FPU a
vypoctu, ale protoze FPU vyjadruje cisla JINAK. I integeru CPU ma zakladni
jednotku '1'. Muzes napsat 1,2,3... U FPU jsou to sileny mocniny 2. Takze zde
neni 'linearni' krok.
Proto je jedno, jesli epsilon pouzijes pro MALY/VELKY cislo. Exponent sem
VUBEC nemotej, nema s tim NIC spolecnyho.
Jo a jeste jedna vec. Narozdil od jinych soustav, u desetinych cisel se
presnost vyajdruje NIKOLIV poctem desetinnych mist, ale presnosti 'na
zobrazene' cifry. Proto v predhozim pripade (docels slusna presnost
mimochodem - drzel jsem tu 0 moc dlouho :o) jsou za 'koncem' cisla dalsi
mista.
Jasny, nebo je potreba jeste nejakej komentar ?
Pivson I a posledni, z bozi vule pivar
A co budou delat cesi ???
Deme na pivo !