Maximální využití čísel s desetinnými místy

Jedním z nejčastěji používaných datových typů v Pythonu je float, který představuje čísla s plovoucí desetinnou čárkou. Čísla s plovoucí desetinnou čárkou jsou čísla, kladná nebo záporná, která mají desetinné místo. Čísla s plovoucí desetinnou čárkou také zahrnují čísla zastoupená pomocí vědeckého zápisu, přičemž znak e nebo E se používá k označení mocniny 10.

Float je velmi důležitý datový typ, protože může reprezentovat širokou škálu reálných čísel, od velmi malých čísel po velmi velká čísla.

Příklady čísel s plovoucí desetinnou čárkou v Pythonu jsou uvedeny níže:

# float numbers
a = 20.0
b = -51.51345
c = 65e7
d = -1.08E12
e = 2E10

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))

Výstup:

<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>

Navíc umožňují přesnější výpočty ve srovnání s datovými typy, jako jsou celá čísla, která odstraňují zlomkovou část čísel. Například s celými čísly by číslo jako 3,142 bylo reprezentováno jednoduše jako 3.

Datový typ float by však představoval skutečné číslo tak, jak je, což je 3,142. Proto jsou plovoucí hodnoty vhodnější pro matematické výpočty, protože poskytují přesnější výsledky.

V tomto ohledu jsou hodnoty s pohyblivou řádovou čárkou široce používány v modelování v reálném světě, strojovém učení, datové vědě, finanční a ekonomické analýze, matematických výpočtech, grafice a vizualizacích a vědeckých a technických výpočtech.

Celá čísla vs. Float v Pythonu

Další velmi populární datový typ v Pythonu jsou celá čísla. Na rozdíl od čísel s pohyblivou řádovou čárkou nemají celá čísla desetinnou čárku. Celá čísla se skládají z kladných celých čísel, záporných čísel a nuly, z nichž všechna nemají zlomkovou část.

Celá čísla jsou užitečná, když provádíme operace, které zahrnují celá čísla, například při počítání nebo indexování. V Pythonu jsou celočíselné hodnoty označovány jako int.

Některá celá čísla jsou uvedena níže:

a = 0
b = 968
c = -14

print(type(a))
print(type(b))
print(type(c))

Výstup:

<class 'int'>
<class 'int'>
<class 'int'>

Některé z rozdílů mezi celými čísly a čísly s plovoucí desetinnou čárkou v Pythonu zahrnují:

CharacteristicCelá čísla(int)Čísla s plovoucí desetinnou čárkou(float)RepresentCelá čísla, jejich záporné protějšky a nula, vše bez desetinného místa. Reálná čísla s desetinnou čárkouPrecisionNeomezená přesnost, takže neexistuje žádné omezení, jak dlouhá nebo velká může být int hodnota. Jediným omezením bude dostupná paměť ve vašem systému. Mají omezenou přesnost. Největší plovoucí hodnota, kterou můžete uložit, je asi 1,8 x 10308Použití pamětiPoužívá méně paměti, která se pohybujePoužije více paměti než celočíselné hodnotyBitové operaceRozsáhle používané v bitových operacích Téměř nikdy se nepoužívají v bitových operacíchUsageTypicky používané při počítání, indexování a bitových operacíRozsáhle používané při měření, vědeckých výpočtech a většinu matematických operací

  Google Meet vs. Zoom: Který je pro vás ten pravý?

Různé způsoby, jak vytvářet a používat plováky v Pythonu

Snadný způsob, jak začít pracovat s hodnotami float v Pythonu, je přiřadit proměnné plovoucí hodnotu, jako je tato:

# assign a variable a float value
a = 3.142

Dalším způsobem, jak získat plovoucí hodnoty, je převést celá čísla a číselné řetězce na plovoucí hodnoty pomocí konstruktoru float(). Pokud do float() předáme celé číslo nebo číselný řetězec, bude převeden na plovoucí hodnotu, jak je uvedeno níže:

number1 = 2524
numString1 = "513.523"
numString2 = "1341"
# Convert to a float and store the float value in a variable
a = float(number1)
print(a)
b = float(numString1);
print(b)
c = float(numString2)
print(c)

Výstup:

2524.0
513.523
1341.0

Ve výše uvedeném příkladu jsou celé číslo a řetězce převedeny na plovoucí hodnotu pomocí float() a poté uloženy do proměnné, která je poté vytištěna, přičemž po převodu je zobrazena výsledná plovoucí hodnota.

Dalším způsobem, jak získat plovoucí hodnoty, je provádění matematických výpočtů, jako je dělení, jak je uvedeno níže:

num1 = 20
num2 = 3
result = num1/num2
print("Result of the division as an integer:")
print(int(20/3))
print("Result of the division as a float value:")
print(result)
print(type(result))

Výstup:

Result of the division as an integer:
6
Result of the division as a float value:
6.666666666666667
<class 'float'>

Ve výše uvedeném příkladu si všimněte, že hodnota float nám poskytuje přesnější odpověď ve srovnání s dělením a získáním výsledku zpět jako celé číslo.

Při práci s plovoucími čísly v Pythonu se můžete setkat s některými velmi zajímavými výsledky kvůli tomu, jak jsou hodnoty s plovoucími čísly reprezentovány interně v počítači. Čísla s pohyblivou řádovou čárkou jsou v počítačovém hardwaru reprezentována jako základní 2 (binární) zlomky.

Většinu desetinných zlomků, zejména ty s opakujícími se desetinnými místy, však nelze reprezentovat jako přesný binární zlomek. V důsledku toho jsou čísla s pohyblivou řádovou čárkou obvykle ukládána jako aproximace skutečné hodnoty.

Abyste to viděli prakticky, zvažte plovoucí hodnotu 0,3. Pokud proměnné přiřadíte interně 0,3, nebude uložena přesně jako 0,3. Abychom to viděli, můžeme použít funkci format(), abychom viděli, jak je 0.3 interně reprezentováno. format() nám umožňuje zobrazit požadovaný počet platných číslic hodnoty, se kterou pracujeme. V níže uvedeném příkladu vytiskneme 0,3 až 20 platných číslic, abychom viděli, jak jsou interně uloženy.

num = 0.3
print("num to 20 significant figures")
print(format(num, '.20f'))
print("Value we stored for num")
print(num)

Výstup:

num to 20 significant figures
0.29999999999999998890
Value we stored for num
0.3

Jak vidíte, hodnota 0,3, kterou jsme přiřadili proměnné s názvem num, není interně uložena přesně jako 0,3. Když proměnnou num vytisknete, získáte zaokrouhlenou hodnotu.

  Jak smazat všechny vaše přímé zprávy na Instagramu

Díky této skutečnosti můžete při práci s plovoucími hodnotami získat nějaké neočekávané výsledky. Například, pokud máte provést ruční výpočet 0,3 + 0,3 + 0,3, vaše odpověď bude 0,9. Nicméně podle Pythonu tomu tak není, protože interně ukládá aproximace binárních zlomků skutečné hodnoty. To lze vidět níže:

sum = 0.3 + 0.3 + 0.3
answer = 0.9
print("Is sum equal to answer: ")
print(sum == answer)
print("The internal representation of of sum is: ")
print(sum)
print("The answer from manual calculation is: ")
print(answer)

Výstup:

Is sum equal to answer: 
False
The internal representation of of sum is: 
0.8999999999999999
The answer from manual calculation is: 
0.9

Při práci s plovoucími hodnotami je proto důležité mít na paměti, že Python interně přesné hodnoty neukládá. Místo toho ukládá přibližné hodnoty skutečné hodnoty.

Proto při porovnávání mezi plovoucími hodnotami možná budete chtít nejprve zaokrouhlit na stejný počet platných číslic. Pro větší přesnost při práci s čísly s plovoucí desetinnou čárkou v Pythonu zvažte použití vestavěného dekadického modulu.

Desítkový modul v Pythonu

V situacích, kde je důležitá a nezbytná vysoká přesnost, jako například ve finančních a vědeckých výpočtech, není použití plováku ideální. Aby byla zaručena vysoká přesnost při práci s čísly s plovoucí desetinnou čárkou, používá se vestavěný modul Python v desítkové soustavě.

Na rozdíl od float, které je uloženo jako binární reprezentace s plovoucí desetinnou čárkou, které jsou závislé na stroji, desetinný modul ukládá čísla s plovoucí desetinnou čárkou pomocí na stroji nezávislé desetinné reprezentace, která nabízí vyšší přesnost.

Kromě toho je desetinný modul schopen reprezentovat desetinná čísla přesně tak, jak jsou, a používat je přesně tak, jak jsou ve výpočtech. Nabízí také správně zaokrouhlenou aritmetiku s plovoucí desetinnou čárkou.

  Kdy vás Google upozorní na odstraněná rozšíření Chrome

Chcete-li začít používat desítkový modul, importujte jej do souboru Python následovně:

import decimal

Abychom viděli přínos desítkového modulu, zopakujme dřívější srovnání mezi součtem 0,3 + 0,3 + 0,3 a hodnotou 0,9. Kód k tomu je uveden níže:

import decimal

sum = decimal.Decimal('0.3') + decimal.Decimal('0.3') + decimal.Decimal('0.3')
answer = decimal.Decimal('0.9')
print("Is sum equal to answer: ")
print(sum == answer)
print("The internal representation of sum is: ")
print(sum)
print("The answer from manual calculation is: ")
print(answer)

Výstup:

Is sum equal to answer: 
True
The internal representation of sum is: 
0.9
The answer from manual calculation is: 
0.9

Proto, když pracujete s čísly s plovoucí desetinnou čárkou a potřebujete vysokou přesnost, nezapomeňte vždy používat desítkový modul.

Běžné chyby při práci s plováky

Mnoho chyb, které vznikají při práci s Float v Pythonu, pramení z nepochopení toho, jak jsou čísla s plovoucí desetinnou čárkou interně reprezentována Pythonem. Například hodnota jako 0,3 nebude uložena přesně jako 0,3. Proto pravděpodobně narazíte na chyby, pokud budete pracovat s plovoucími hodnotami za předpokladu, že jsou uloženy přesně tak, jak jsou.

Jednou z běžných chyb je chyba zaokrouhlování, se kterou se setkáte při provádění matematických výpočtů s plovoucími hodnotami. Vzhledem k tomu, že Python nemůže reprezentovat skutečné hodnoty s plovoucí desetinnou čárkou, pravděpodobně narazíte na chyby zaokrouhlování, kdy výsledky nemusí odpovídat vašim očekáváním.

Kvůli chybám, jako jsou chyby zaokrouhlování, pravděpodobně narazíte na chyby, když se pokusíte provést porovnání rovnosti mezi hodnotami s plovoucí desetinnou čárkou. Při práci s plováky v Pythonu buďte velmi opatrní a buďte si vědomi neočekávaných výsledků.

Lepším způsobem, jak se vyhnout všem chybám, které mohou nastat při práci s plovoucími hodnotami, je použít vestavěný dekadický modul. Tímto způsobem budou výsledky vašich výpočtů čísel s pohyblivou řádovou čárkou předvídatelnější a přesnější.

Závěr

Jako programátor pracující s Pythonem jste povinni používat datový typ float. Abyste se vyhnuli chybám s tímto typem dat, je důležité pochopit, jak Python interně reprezentuje čísla s plovoucí čárkou. Vzhledem k tomu, že Python nemůže ukládat skutečná čísla float, vyhněte se provádění přesných porovnání rovnosti s hodnotami float. V opačném případě narazíte na chyby.

V případě, že ve své aplikaci potřebujete přesné výsledky, nepoužívejte plovoucí hodnoty. Místo toho použijte vestavěný desítkový modul, který poskytuje přesné výsledky čísel s plovoucí desetinnou čárkou a představuje je přesně tak, jak jsou, a způsobem nezávislým na počítači.

Můžete si také přečíst Python Itertools Functions a Python Try Except.