zde
Transkript
zde
1. Chyby vstupních dat metody převedení úlohy na numerickou (řád použité metody) zaokrouhlovací – reprezentace čísel v počítači 2. Reprezentace čísel v Pascalu ● celá čísla Typ Rozsah Formát shortint integer longint byte word comp 128..127 32768..32767 2147483648.. 2147483647 0..255 0..65535 9.2×1018..9.2×1018 8 bitů se znaménkem 16 bitů se znaménkem 32 bitů se znaménkem 8 bitů bez znaménka 16 bitů bez znaménka 64 bitů se znaménkem celá čísla jsou v daném rozsahu reprezentována přesně rovněž operace s celými čísly jsou přesné pokud nedojde k překročení rozsahu ● čísla s plovoucí desetinnou čárkou Typ Rozsah Cifer Bytů Standard single real double extended 1.5×1045..3.4×1038 2.9×1039..1.7×1038 5.0×10324..1.7×10308 3.4×104932..1.1×104932 78 1112 1516 1920 4 6 8 10 IEEE Borland IEEE IEEE čísla s plovoucí desetinnou čárkou jsou reprezentována ve formátu znaménko (1 bit) + exponent (8,8,11,15 bitů) + (1 bit u extended) + mantisa (23,39,52,63 bitů) např. Single podle normy IEEE 754 1 8 23 s e f msb lsb msb lsb šířka v bitech msb (most significant bit) lsb (least significant bit) pokud e=255 a f!=0, pak je číslo NaN pokud e=255 a f =0, pak je číslo (1)s INFINITY pokud 0<e<255, pak je číslo (1)s 2(e127) (1.f) v normalizovaném tvaru pokud e=0 a f!=0, pak je číslo (1)s 2126 (0.f) v nenormalizovaném tvaru pokud e=0 a f=0, pak je číslo (1)s 0 Čísla v nenormalizovaném tvaru použita u IEEE pro větší přesnost Typ Nejmenší číslo > 0 V nenormalizovaném tvaru Single Real Double Extended 1.2×1038 2.9×1039 2.3×10308 3.4×104932 1.4×1045 není 5.0×10324 1.9×104951 Číslo větší než maximální možné pro daný typ – vyjímka Číslo menší než minimální možné pro daný typ – vyjímka Overflow Underflow Příklady v Pascalu (MINREAL.PAS) MAXREAL.PAS PRESSD.PAS PRESR.PAS 3. Šíř ení chyb ve výpočtech týká se operací s čísly s plovoucí desetinnou čárkou ● násobení, dělení určí se znaménko, sečtou (nebo odečtou) se exponenty, vynásobí nebo vydělí se mantisy relativní chyba je malá, v podstatě nezávislá na násobených (dělených) číslech ● sčítání, odčítání čísla se nejprve musí převést na společný exponent – pokud se od sebe liší v několika řádech, vzniká mnohem větší relativní chyba (největší je při odčítání téměř stejných čísel) Nejtypičtějším příkladem, kdy je vyniklá chyba závažná je výpočet kořenů kvadratické rovnice, pokud platí ac ≪ b2 Příklady v Pascalu DEMPKVAD.PAS Napřklad pro rovnici (x0.0001)(x10000.0) = 0 , kde jsou koeficienty a=1, b=10000.0001, c=1 vyjde relativní chyba u menšího kořene 1.0 – kořen vyjde nulový a přitom má vyjít 104 4. Nestabilita v některých algoritmech dochází k akumulaci zaokrouhlovací chyby to vede postupně k takové ztrátě přesnosti, že výsledek je nesmyslný u stabilních metod roste zaokrouhlovací chyba s počtem kroků nejvýš lineárně Příklady nestabilních algoritmů v Pascalu NESTAB1.PAS SPLINPR.PAS NESTOD2.PAS Zlatý ř ez Výpočet mocnin 'zlatéh o řezu' – jeden z kořenů rovnice x2+x1=0 = 5−1 ≃0.618033989 2 Pro mocniny platí rekurentní vztah n+1 = n1 n, avšak při počítání pomocí tohoto vztahu na počítači dochází k velké akumulaci chyb a výsledek je někdy dokonce záporný a pro vysoké mocniny dokonce v absolutní hodnotě větší než 1. Pokud počítáme pro n+1=20 postupně dosazujeme do rekurentního vztahu, dojdeme až k vyjádření 20 = 4181 0 6765 1, jelikož ale již v 1. kroku není vyjádření přesné, ale jeho přesnost je omezena použitým číselným typem, můžeme přepsat vztah jako 20 = 4181 0 6765( 1+). Počáteční nepřesnost je pro typ single 108, a vychází tedy 20 = 41816765*0.6180339896765*108= 6.4415*1056.765*105= 3.235*106. Nestabilní metoda pro ODE Je zadána ODE y'= y s počáteční podmnkou y(0)=1 . Analytické řešení této rovnice je y(x)=y(0)exp(x). Pokud použijeme pro numerické řešení dvoukrokovou metodu 2. řádu přesnosti, bude algoritmus nestabilní. V této metodě se nahradí derivace v bodě x+h y'(x+h)≃(y(x+2h)y(x))/2h = y(x+h). Poduk se použije například metoda Eulerova, která je velmi jednoduchá a pouze 1. řádu přesnosti, je algoritmus sice nepřesný, ale stabilní a numerická chyba nenarůstá tak rychle. Eulerova metoda je y(x+h)=y(x)+h*y'(x)=y(x)h*y(x). Na začátku je přitom 1. metoda přesnější, ale její chyba postupně narůstá a výsledek brzy přestá dávat smysl. Nestabilní SPLINE Spline se používá k interpolaci dat, přičemž se jedná o interpolaci lokální, nejčastěji kvadratickým polynomem a v interpolečních uzlech jsou spojité derivace. Podmínky na tento polynom se zadávají v krajních bodech. Pokud se obě zadají v bodě jednom, může být algoritmus nestabilní. Například pokud místo dvou 1. derivací v krajních bodech zadáme v jednom bodě derivaci 1. i 2. Matematicky se přitom jedná o ekvivalentní úlohu.
Podobné dokumenty
Čísla v plovoucí řádové čárce
stejný počet). Rozestup mezi reprezentovatelnými body a velikost
největší chyby pro jistý exponent je základ-krát větší než chyba v
předchozím intervalu.
• Vidíme, že není pravda, že čísla FP jsou ...