Ztráta významu - Loss of significance
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|

Ztráta významu je nežádoucí účinek ve výpočtech využívajících aritmetiku s konečnou přesností, jako je aritmetika s plovoucí desetinnou čárkou. Nastane, když se zvýší operace na dvou číslech relativní chyba podstatně více, než se zvyšuje absolutní chyba, například při odečtení dvou téměř stejných čísel (označovaných jako katastrofické zrušení). Výsledkem je, že počet významné číslice ve výsledku je nepřijatelně snížen. Způsoby, jak se tomuto efektu vyhnout, jsou studovány v numerická analýza.
Demonstrace problému
Efekt lze demonstrovat pomocí desetinných čísel. Následující příklad ukazuje ztrátu významnosti pro datový typ s desetinnou plovoucí desetinnou čárkou s 10 platnými číslicemi:
Zvažte desetinné číslo
x = 0,1234567891234567890
Reprezentace tohoto čísla s plovoucí desetinnou čárkou na stroji, který uchovává 10 číslic s plovoucí desetinnou čárkou, by byla
y = 0,1234567891
což je docela blízko při měření chyby jako procenta hodnoty. Při měření v pořadí přesnosti je to velmi odlišné. Hodnota 'x' je přesná 10×10−19, zatímco hodnota „y“ je pouze přesná 10×10−10.
Nyní proveďte výpočet
x - y = 0,1234567891234567890 - 0,1234567890000000000
Odpověď s přesností na 20 platných číslic je
0.0000000001234567890
Na 10místném stroji s plovoucí desetinnou čárkou však výpočet přináší
0.1234567891 − 0.1234567890 = 0.0000000001
V obou případech je výsledek přesný se stejným řádem jako vstupy (−20 a −10). V druhém případě se zdá, že odpověď má jednu významnou číslici, což by znamenalo ztrátu významnosti. Avšak v počítačové aritmetice s plovoucí desetinnou čárkou lze všechny operace zobrazit jako prováděné na antilogaritmy, pro které platí pravidla pro významné postavy uveďte, že počet platných čísel zůstává stejný jako nejmenší počet platných čísel v EU kudlanky. Způsob, jak to naznačit a představovat odpověď na 10 platných čísel, je
1.000000000×10−10
Řešení
Je možné provádět výpočty pomocí přesné zlomkové reprezentace racionálních čísel a zachovat všechny významné číslice, ale toto je často neúměrně pomalejší než aritmetika s plovoucí desetinnou čárkou.
Jednou z nejdůležitějších částí numerické analýzy je vyhnout se nebo minimalizovat ztrátu významnosti ve výpočtech. Pokud je základní problém dobře položený, měl by existovat stabilní algoritmus pro jeho řešení.
Někdy chytré triky algebry mohou změnit výraz do podoby, která obchází problém. Jedním z takových triků je použití známé rovnice
Takže s výrazem , vynásobte čitatele a jmenovatele číslem dávat
Nyní může výraz být snížena, aby se odstranilo odečtení? Někdy může.
Například výraz může utrpět ztrátu významných bitů, pokud je mnohem menší než 1. Takže přepište výraz jako
nebo
Ztráta významných bitů
Nechat X a y být kladná normalizovaná čísla s plovoucí desetinnou čárkou.
V odčítání X − y, r kde se ztratí významné bity
pro některá kladná celá čísla p a q.
Nestabilita kvadratické rovnice
Zvažte například kvadratická rovnice
se dvěma přesnými řešeními:
Tento vzorec nemusí vždy přinést přesný výsledek. Například když je velmi malý, může dojít ke ztrátě významnosti v některém z kořenových výpočtů, v závislosti na znaménku .
Pouzdro , , bude sloužit k ilustraci problému:
My máme
Ve skutečné aritmetice jsou kořeny
V 10místné aritmetice s plovoucí desetinnou čárkou:
Všimněte si, že řešení větší velikost je přesný na deset číslic, ale první nenulová číslice řešení menší velikosti je nesprávná.
Kvůli odčítání, které se vyskytuje v kvadratické rovnici, nepředstavuje stabilní algoritmus pro výpočet dvou kořenů.
Lepší algoritmus
Opatrně plovoucí bod počítačová implementace kombinuje několik strategií k dosažení robustního výsledku. Za předpokladu, že diskriminující b2 − 4ac je pozitivní a b je nenulová, výpočet by byl následující:[1]
Zde sgn označuje znaková funkce, kde je 1, pokud je kladné a −1 pokud je negativní. Tím se vyhnete problémům se zrušením mezi a druhá odmocnina diskriminujícího zajištěním přidání pouze čísel stejného znaménka.
Pro ilustraci nestability standardního kvadratického vzorce ve srovnání s tímto vzorcem zvažte kvadratickou rovnici s kořeny a . Na 16 platných číslic, což zhruba odpovídá dvojnásobná přesnost přesnost na počítači lze monickou kvadratickou rovnici s těmito kořeny zapsat jako
Při použití standardního kvadratického vzorce a zachování 16 platných číslic v každém kroku se získá standardní kvadratický vzorec
Všimněte si, jak zrušení vyústilo vypočítává se pouze na 8 platných číslic přesnosti.
Zde uvedený variantní vzorec však poskytuje následující:
Všimněte si uchování všech platných číslic pro .
Všimněte si, že zatímco výše uvedená formulace se vyhne katastrofickému zrušení mezi a , mezi podmínkami zůstává forma zrušení a diskriminátoru, což může stále vést ke ztrátě až poloviny správných platných číslic.[2][3] Diskriminační je třeba počítat aritmetikou dvojnásobné přesnosti výsledku, aby se tomu zabránilo (např. čtyřkolka přesnost, pokud má být konečný výsledek přesný dvojnásobek přesnost).[4] Může to mít formu a fúzovaný násobit-přidat úkon.[2]
Pro ilustraci zvažte následující kvadratickou rovnici převzatou z Kahana (2004):[2]
Tato rovnice má a kořeny
Při výpočtu pomocí aritmetiky s dvojitou přesností IEEE 754, která odpovídá 15 až 17 platným číslicím přesnosti, je zaokrouhleno na 0,0 a vypočítané kořeny jsou
které jsou po 8. významné číslici nepravdivé. A to navzdory skutečnosti, že povrchně se zdá, že problém vyžaduje pouze 11 platných číslic přesnosti pro jeho řešení.
Viz také
- Chyba zaokrouhlování
- Kahanův součtový algoritmus
- Karlsruhe přesná aritmetika
- Exsecant
- Exponenciální mínus 1
- Přirozený logaritmus plus 1
- Příklad ve wikibookech: Zrušení platných číslic v numerických výpočtech
Reference
- ^ Press, William Henry; Flannery, Brian P.; Teukolsky, Saul A.; Vetterling, William T. (1992). „Oddíl 5.6: Kvadratické a kubické rovnice“. Numerické recepty v jazyce C. (2. vyd.).
- ^ A b C Kahan, William Morton (2004-11-20). „Na úkor výpočtu s plovoucí desetinnou čárkou bez mimořádně přesné aritmetiky“ (PDF). Citováno 2012-12-25.
- ^ Higham, Nicholas John (2002). Přesnost a stabilita numerických algoritmů (2. vyd.). SIAM. str. 10. ISBN 978-0-89871-521-7.
- ^ Hough, David (březen 1981). Msgstr "Aplikace navrhovaného standardu IEEE 754 pro aritmetiku s plovoucí desetinnou čárkou". Počítač. IEEE. 14 (3): 70–74. doi:10.1109 / C-M.1981.220381.