Posted By: pivson (Pijte pivo, je zdrave !!!) on 'CZprogram'
Title: Re: Zaokrouhlovani cisla typu Extendedyn
Date: Sat May 11 11:36:58 2002
> Snadno - znam teorii a ze neznam jeden konretni header sice mozna je smutny,
> ale nemyslim, ze me to hned diskvalifikkuje.
Ok, sorry :)
> Zahnals me do defensivy. Protoze reagujes na muj post, tak mam dojem, ze za
> toho idiota co neumi zaklady povazujes me. Tudiz mi to ted nedalo a misto
> hledani ve skriptech jsem si to zkusil napsat:
Ne, ale motaj se tu dohromady _2_ veci. Tak na to pozor.
> int main(int argc, char *argv)
> {
> float a,b,c, d;
> scanf("%f %f %f", &a, &b, &c);
> if ((a * b - c) < FLT_EPSILON)
> printf ("MATCHn");
> else
> printf ("DON'T MATCHn");
> d = a * b - c ;
>
> printf("%15.10fn", d);
> return 0;
> };
Ted sem motas neprensot zpusobenou __vypoctem__, nikoliv neprenost, ktera
vznika pri __konverzi__ cisel. Tedy narazis na jinou vec nez jsem (minimalne
ja) vysvetloval.
> Takze na porovnani dvou cisel pomoci te konstanty muzu snad uz klidne
> zapomenout, ne? Exponent se proste pouzije a je jedno, jestli je binarni
> nebo
> dekadickej.
Mluvis o necem jinym. Tohle je zavisli na KONKRETNI veci - a rozhodne nemuzes
prijit s nejakou 'konstatnou' protoze ve vetsim vzorci se ti tyhle neprenosti
nabali pekne na sebe. Krom toho je zcela logycky, ze pri velkych cislech bude
nepresnot daleko vetsi. Pokud mas presnost jen 'par' cifer a pohybujes se
nekde na ~25 cifrach, pak je chyba celkem slusne velka.
Jak uz rekl Rat, pletou se tu dohromady 2 zcela rozdilny veci. Dovolim si
pripomenou puvodni post:
----
A := 824.5
Writeln(A) vypise 824.49999999.... {OK, to bych jeste zkousnul}
----
1. Nevyskytuje se zde zadne operace, ktere zpusobuji velkou chybu
2. Pohybujeme se v rozumny abs. velikosti (rady) s ohledem na prenost
3. Jedna se prakticky o nacteni/vystup cisla
Ktera z 2 hlavnich nepresnosti zde vystupuje ? A na tohle je presne EPSILON
konstanta. NE na to aby ti pokryla chybu ve vypoctech (nepresnost). Ta je
zavisla na moooooc faktorech. A podle mne nemuzes dat univerzalni recept, jak
tuto chybu 'zohlednit'. Nekde to bude to co si psal ty (mimochodem,
nepolemizoval jsme o tom ze by to byla blbost, aspon jsem si nevsim ze bych to
tvrdil).
Mimochodem, ve floatech se v naprosty vetsine pocita spise s cislama "blizky"
~0-1, ne nekde exponenty e20 a pod. Prave z toho duvodu, ze i mala banalita
znamena 'uplne jinej vysledek' - v absolutnim meritku.... Mimo jiny prave
proto existujou knihovny, co pocitaj na nekolik stovek platnejch mist. Pro
nejlepsi vyuziti presnosti nema smysl se pohybovat ve vysokych radech.
Pivson I a posledni, z bozi vule pivar
A co budou delat cesi ???
Deme na pivo !