Ztráta významu - Loss of significance

Příklad LOS v případě výpočtu 2 forem stejné funkce

Ztráta významnosti je nežádoucím účinkem ve výpočtech pomocí aritmetiky s konečnou přesností, jako je aritmetika s plovoucí desetinnou čárkou . Dochází k němu, když operace na dvou číslech zvyšuje relativní chybu podstatně více, než zvyšuje absolutní chybu , například při odečtení dvou téměř stejných čísel (známé jako katastrofické zrušení ). Důsledkem je , že počet platných číslic ve výsledku je nepřijatelně snížen. Způsoby, jak se tomuto efektu vyhnout, jsou studovány v numerické analýze .

Demonstrace problému

Odčítání

Efekt lze prokázat desetinnými čísly. Následující příklad ukazuje katastrofické zrušení 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 považovat za prováděné na antilogaritmech , u nichž pravidla pro významné číslice naznačují, že počet platných čísel zůstává stejný jako nejmenší počet platných čísel v mantisách . Způsob, jak to naznačit a představovat odpověď na 10 platných čísel, je

   1.000000000×10−10


Ztráta významných bitů

Nechť x a y jsou kladná normalizovaná čísla s plovoucí desetinnou čárkou.

V odčítání x - y , kde jsou ztraceny r významné bity

pro některá kladná celá čísla p a q .

Ř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

S výrazem tedy vynásobte čitatele a jmenovatele dáváním

Lze nyní výraz snížit tak, aby se vyloučilo odčítání? Někdy může.

Například výraz může utrpět ztrátu významných bitů, pokud je mnohem menší než 1. Přepište tedy výraz jako

nebo

Nestabilita kvadratické rovnice

Zvažte například kvadratickou rovnici

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 .

Případ , , bude sloužit pro 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ší velikosti 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

Pečlivá počítačová implementace s plovoucí desetinnou čárkou kombinuje několik strategií k dosažení robustního výsledku. Za předpokladu, že diskriminační b 2 - 4 ac je kladné a b je nenulové, výpočet by byl následující:

Zde sgn označuje funkci znaménka , kde je 1, pokud je kladné, a -1, pokud je záporné. Tím se zabrání problémům se zrušením mezi a druhou odmocninou 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, zhruba odpovídajících přesnosti s dvojitou přesností v počítači, lze monickou kvadratickou rovnici s těmito kořeny napsat 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í vedlo k tomu, že bylo počítáno pouze s 8 platnými číslicemi 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 i když se výše uvedená formulace vyhne katastrofickému zrušení mezi a , zůstává forma zrušení mezi podmínkami a diskriminační, což může stále vést ke ztrátě až poloviny správných platných číslic. Aby se tomu zabránilo, je třeba diskriminátor vypočítat aritmeticky s dvojnásobnou přesností výsledku (např. Čtyřnásobná přesnost, pokud má být konečný výsledek přesný na plnou dvojnásobnou přesnost). Může to být ve formě operace kondenzovaného vícenásobného přidání .

Pro ilustraci zvažte následující kvadratickou rovnici převzatou z Kahana (2004):

Tato rovnice má kořeny

Při výpočtu pomocí aritmetiky s dvojitou přesností IEEE 754 odpovídající 15 až 17 platných číslic přesnosti je však 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í.

Další příklady

  • Funkce expm1 vypočítá exponenciální mínus 1 . Pro malé x , exp ( x ) - 1 způsobí ztrátu významu v odčítání; použití speciálně navržené funkce pomáhá vyřešit problém.

Viz také

Reference