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

>  Tohle se tu resilo cca pred nejakou relativne nedavnou dobou, a ... FPU 
> dokaze naprosto presne vyjadrit jakekoli cele cislo (rozumne velke - tzn. do
> velikosti mantisy). 
Jasne, ja to bral jen jako priklad (ilustraci). Obecne cely cisla vyjadris 
presne, to se shodnem. Ono taky pokud se budes pohybovat v N/Z cislech, tak 
ve vetsine pripadu ani nepotrebujes epsilon (viz niz).
 
>  Jestli vyse uvedene spravne chapu, tak tvrdis, ze if (abs(a-b) < KONST_EPS)
> je spravny zpusob porovnani pro jakkoli velke/male a, b ? Presnost se ti
> prave 
> ztraci v prvnim bitu za mantisou, ktera na exponentu zavisla je. Zkus
> loadnout 
> double, ulozit ho dvakrat jako float, jednou pri nastavenem zaokrouhlovani 
> dolu, podruhe nahoru, loadni znovu a spocitej rozdil.
Pokud jsou a,b 'ruzna' hodne od sebe, pak je jejich rozdil sam o sobe velkej, 
tutiz porovnani s E vyjde 'tak jak ma' (tedy to abs bude vetsi). Ztraci se 
vic nez jeden bit, neb interne je presnost 80 (intelovsky FPU). Co se tyce 
tohodle bitu, tak pri dodrzeni podminky ze M je <0.5-1) bude vzdy nejvissy 
bit mantisi 1ka a toho je v IEEE754 zneuzito k tomu (neni pouzivanej a pri 
vypoctech je doplnovanej automaticky) se zvojnasuboje presnost. Pokud se 
dostavas do oblasti nizkych exponentu (hodne malych cisel) tak prestava mit 
smysl neco porovnavat na presnost (ted sa bavime o cislech blizkych 
nejnizsimu vyjadritelnymu cislu). A samozrejmne ze to zavisi na 
zaokrouhlovani (a je jedno jesli je dvojita nebo normlani presnot, vzdy se 
bude zaokrouhlovat). Tedy ano, dovolim si trvdit ze je to spravne (minimalne 
podle IEEE normy kdyz ne podle mne :) 

Podle mne, pokud cisla na vstupu mas presne vyjadritelna v soustave co FPU 
pouziva a vysledek vypoctu je opetovne vyjadritelnej (bez chyb) v soustave 
cisel na vstupu/vustupu (tedy m*10^e), potom ti test bude sedet primo. To jsem 
tim chtel rict. Nic vic nic min. Nechci se prit o zaokrouhlovani a pod. 
To je JINA story. Neboli: 

a=1.345;
b=1.123;
c=a+b;

if (c==2.468) NEBUDE fungovat, protoze 1.123 nevyjadris presne. Bude to
0.5615*2^1 coz je 1.12299999999999999999999999999 [ted uz mne doufam 
nebudes chytat za slovo - mas tu exaktni priklad] coz je sice moooc mala 
chyba (prakticky nevyjadritelna - nekonecne mala - asi jako u tech zlomku 
jak jsem postoval vise), nicmene, zapricini onu 'nepresnost' (kde se porovnava 
absolutni binarni hodnota). Nic vic netvrdim. A proto je epsilon tak maly aby 
pokrylo JEN tento rozdil, NIC vic.

Abych to dokoncil, test neprojde. Pokud a/b zmenis na 

a=1.345
b=1.2228

Tak uz to projde, protoze obe cisla vyjadris presne v notaci FPU

a=0.6725*2^1
b=0.5614*2^1

[oboje jsem pro jistotu odzkousel a fungujou - jak slackware tak windoze]

Zkus si to, pripadne sem muzu nakopirovat binarni podobu techto cisel. Pokud 
bude existovat presna reprezentace mezi soustavama, pak bude i presne sedet 
vysledek. 

Chyba pri vypoctu, vznikla zaokrouhlovanim je 'jina'. Ta se tady neimplikuje 
(kde ce treba ve vyse uvedem projevi ?) Neboli, tuhle chybu ja neberu v potaz, 
protoze uz jen ta "nepresnost" staci k tomu abys potreboval epsilon. A chybu v 
zaokrouhlovani nemuzes posuzovat obecne, ta zalezi uz na konkretni veci (co 
se pocita, jak, v jakym poradi, ....) Ad zaokrouhlovani - tak je to zavisli na 
VYSI cisla, to se shodneme. Ale nepresnot o ktery tu mluvime prameni nekde 
jinde (viz puvodni post kde bylo klasicky a,b,c=a+b a test na c). Nekde muze 
byt chyba (absolutne) 0.0000000000001% 'adekvatni' (a akceptovatelna), jinde 
to mzue byt uplne jinak. 

Nechapu proc sem pletes double a floaty (predpokladam ze mas na mysli 32/64). 
Napis vis co si tim myslel. Ja celou dobu mluvim o nepresnoti jako TAKOVY, ne 
nepresnosti vzikajici PRI vypoctu (opet odkazuji na puvodni post, presne na 
toto narazel). 

 
>  Tohle podle me nezalezi ani tak na soustave, jako spis na lidske definici
> ;) 
Zalezi to na soustave v jaky visla vyjadrujes. Ted nemam na mysli obor 
(N,Z,R,Q...). Pokud jedno cislo vyjadrujes ve tvaru

x=m*10^e
a druhy
y=m*2^e

Tak z toho plyne, ze ne vsechna X bydou mit adekvatni (naprosto __presne__) 
vyjadreni v Y a opacne. Uplne stejne jako barevny soustavy. RGB - HSL - 
CMYK.... Ne vsechny barvy vyjadris presne napric soustavama. Proto ma 
Photoshop a podobny editaci primo (napr.) v CMYK, nebo existujou zobrazovaci 
zarizeni CMYK. Uplne stejne je to s floatama. Pro grafika ta ztrata nekdy muze 
bejt az moc velka. Stejne tak pro matematika. Proto existujou kniohny, ktery 
pocitaj n 'nasi' soustave, tedy nenabalujou se na sebe '2' nepresnoti. 
Nepresnost vypoctu (ta existuje) a neprenost (rekneme) prevodu mezi 
soustavama. 

Nicmene, nejsem matematik tak asi nepouzivam spavne nazvoslovi pro 
soustavu/mnozinu a ja nevim co. Soustava = tak jak cislo vyjadruju (treba 2 
versis 10 v exponentu). Pokud je to jinak, sem s tim.
 

Pivson I a posledni, z bozi vule pivar

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

Search the boards