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×10­45..3.4×1038
2.9×10­39..1.7×1038
5.0×10­324..1.7×10308
3.4×10­4932..1.1×104932
7­8
11­12
15­16
19­20
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(e­127) (1.f) v normalizovaném tvaru
pokud e=0 a f!=0, pak je číslo (­1)s 2­126 (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×10­38
2.9×10­39
2.3×10­308
3.4×10­4932
1.4×10­45
není
5.0×10­324
1.9×10­4951
Čí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 PRES­SD.PAS PRES­R.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 (x­0.0001)(x­10000.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 10­4
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+x­1=0
 =   5−1
≃0.618033989
2
Pro mocniny platí rekurentní vztah
 n+1 =  n­1­  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 10­8, a vychází tedy
 20 = 4181­6765*0.618033989­6765*10­8= 6.4415*10­5­6.765*10­5= ­3.235*10­6.
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

Čí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 ...

Více