logo

Rozsah plováku v pythonu

V Pythonu je dosah plováku hodnoty závisí na implementaci a platformě. Specifikace jazyka Python to pouze vyžaduje plovoucí bod čísla podporují minimálně 1e-308 na 1e+308 s přesností minimálně 53 bitů .

V praxi většina moderních implementací Pythonu používá IEEE 754 standard s plovoucí desetinnou čárkou, který poskytuje rozsah přibližně 1,7e-308 na 1,7e+308 s přesností 53 bitů . Tento rozsah je stejný na všech platformách a je podporován plovoucím vestavěným typem.

Je však důležité poznamenat, že aritmetika s plovoucí desetinnou čárkou podléhá zaokrouhlovacím chybám a dalším zdrojům nepřesnosti, zejména při provádění operací s velmi velkými nebo velmi malými čísly. V některých případech to může vést k neočekávanému chování a chybám.

Aby se předešlo těmto problémům, často se doporučuje používat desetinný nebo pevný bod aritmetika při práci s peněžními hodnotami nebo jinými aplikacemi, které vyžadují vysokou přesnost. The desítkový modul v Pythonu poskytuje podporu pro aritmetiku s pevnou řádovou čárkou s konfigurovatelnou přesností a je pro tyto aplikace dobrou alternativou k aritmetice s pohyblivou řádovou čárkou.

java booleovský řetězec

The IEEE 754 standard definuje rozsah a přesnost čísel s plovoucí desetinnou čárkou používaných většinou moderních programovacích jazyků, včetně Pythonu. Norma definuje dva základní formáty pro čísla s plovoucí desetinnou čárkou:

    Formát s jednou přesností

Používá 32 bitů a poskytuje přibližně 7 desetinných míst číslice přesnosti.

    Formát s dvojnásobnou přesností

Používá 64 bitů a poskytuje přibližně 16 desetinných míst číslice přesnosti.

Používá Python dvojitá přesnost čísla s plovoucí desetinnou čárkou ve výchozím nastavení, což znamená, že rozsah plovoucích hodnot je přibližně 1,7e-308 na 1,7e+308 s přesností 53 bitů . Tento rozsah je určen maximálními a minimálními exponenty, které lze pomocí reprezentovat 11 bitů v kombinaci s maximálními a minimálními significands (tj. zlomkovou částí čísla), které lze reprezentovat pomocí 52 bitů .

Skutečná přesnost aritmetiky s plovoucí desetinnou čárkou může být ovlivněna mnoha faktory, včetně způsobu uložení čísel v paměti, pořadí operací a volby režimu zaokrouhlování. V některých případech může vést k jemným zaokrouhlovacím chybám a dalším zdrojům nepřesnosti.

Aby se předešlo těmto problémům, často se doporučuje používat alternativní přístupy při práci s velmi velkými nebo velmi malými čísly nebo když je vyžadována vysoká přesnost. Například:

  1. Použití aritmetika s pevnou řádovou čárkou nebo desítková aritmetika , který poskytuje pevný počet desetinných míst s přesností a zabraňuje chybám při zaokrouhlování.
  2. Použití libovolná přesnost knihovny jako 'mpmath' nebo 'gmpy2' , které umožňují provádět výpočty s velmi vysokou přesností a vyhnout se chybám při zaokrouhlování.

Jedním důležitým aspektem je, že při provádění aritmetických operací na číslech s plovoucí desetinnou čárkou v Pythonu se můžete setkat s neočekávaným chováním kvůli způsobu, jakým aritmetika s plovoucí desetinnou čárkou funguje.

Některé aritmetické operace mohou mít za následek velmi malá nebo velmi velká čísla, která nelze přesně vyjádřit pomocí aritmetiky s plovoucí desetinnou čárkou. V těchto případech může být výsledek zaoblený nebo zkrácený , což vede k neočekávanému chování nebo nepřesnostem ve vašich výpočtech.

Aritmetika s plovoucí desetinnou čárkou není asociativní , což znamená, že pořadí, ve kterém provádíte operace, může ovlivnit výsledek. Například, (a + b) + c se nemusí rovnat a + (b + c) kvůli zaokrouhlovacím chybám a dalším zdrojům nepřesnosti.

Aritmetika s plovoucí desetinnou čárkou také není distribuční , což znamená, že (a + b) * c se nemusí rovnat a * c + b * c kvůli zaokrouhlovacím chybám a dalším zdrojům nepřesnosti. Aby se minimalizoval dopad těchto problémů, často se doporučuje používat matematický modul nebo jiné numerické knihovny, které poskytují funkce pro provádění aritmetických operací na číslech s plovoucí desetinnou čárkou přesnějším a spolehlivějším způsobem. Je také dobrým zvykem vyhýbat se porovnávání čísel s pohyblivou řádovou čárkou pro rovnost a místo toho používat práh tolerance nebo jiné metody pro porovnávání velikosti rozdílu mezi dvěma hodnotami.

Příklad:

Ukažme si příklad, jak na to aritmetika s plovoucí desetinnou čárkou může vést k neočekávanému chování v pythonu:

 a = 0.1 b = 0.2 c = 0.3 result1 = (a + b) + c result2 = a + (b + c) print(result1) print(result2) 

Výstup:

 0.6000000000000001 0.6 

Vysvětlení:

V tomto příkladu provádíme dva různé výpočty s použitím stejných hodnot a, b, a C . V prvním výpočtu přidáme A a b nejprve a poté přidejte výsledek do C . Ve druhém výpočtu přidáme b a C nejprve a poté přidejte výsledek do A .

Můžeme očekávat, že oba výpočty poskytnou stejný výsledek, protože používají stejné hodnoty a, b , a C . Kvůli omezením aritmetiky s plovoucí desetinnou čárkou však tyto dva výpočty poskytují mírně odlišné výsledky.

První výpočet poskytne výsledek 0,6000000000000001 , zatímco druhý výpočet produkuje výsledek 0,6 . Je to proto, že mezivýsledky prvního výpočtu se mírně liší od mezivýsledků druhého výpočtu kvůli chybám zaokrouhlování a dalším zdrojům nepřesnosti.

Chcete-li se těmto problémům vyhnout, často se doporučuje používat desítkový modul nebo jiné způsoby provedení aritmetické operace na plovoucí bod čísla přesnějším a spolehlivějším způsobem.

Například:

 import decimal a = decimal.Decimal('0.1') b = decimal.Decimal('0.2') c = decimal.Decimal('0.3') result1 = (a + b) + c result2 = a + (b + c) print(result1) print(result2) 

Výstup:

 0.6 0.6 

Vysvětlení:

V tomto příkladu používáme desítkový modul provádět stejné výpočty pomocí pevný bod aritmetika s přesností 1 desetinné místo. Umožňuje nám to vyhnout se zaokrouhlovacím chybám a dalším zdrojům nepřesnosti, které mohou ovlivnit plovoucí bod aritmetický. Výsledkem je, že oba výpočty produkují stejný výsledek 0,6 .