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 !