Hogyan és mivel végezzünk nagy számítási pontosságot igénylő műveleteket?

Ha a Pythonban a számítási műveleteket float típusú operandusokkal végzünk, akkor azt tapasztalhatjuk, hogy nem mindig kapunk pontos, egzakt eredményt, még akkor sem, ha előre ismert számú jegyet tartalmazó véges tizedestört, vagy akár egész szám lenne az eredmény. Például 3*0.14 = 0.42000000000000004, vagy 10e9-10e-9 = 10000000000.0, vagy 2.3-0.1-0.1-0.1 = 1.9999999999999996, amelyek egyike sem pontos eredmény.

Ennek oka, hogy a számítógép binárisan, a 2 hatványaival ábrázolja a számokat, és a tizedes törtek nem mindig ábrázolhatók pontosan bináris törtként. Ez a korlát az alkalmazások nagy részében nem okoz gondot. Vannak azonban olyan matematikai vagy más tudományos feladatok, amelyeknél a számítási pontosság döntő jelentőségű, és nem engedhető meg az ábrázolási pontatlanságból vagy azok halmozódásából eredő hiba. Ilyen területek például az orbitális pályák számítása, a klímamodellek vagy a nukleáris fizikai számítások.

Nem kell azonban lemondanunk ezekről az alkalmazásokról sem, mert az ilyen, nagypontosságú számításokat a szabványos könyvtár decimal moduljának igénybevételével el tudjuk végezni. A számokat az e modulból elérhető Decimal típussal ábrázoljuk.

Az alábbi kódsorokban láthatjuk a fent felsorolt műveletek eredményét Decimal típus használatával. Itt az is látható még, hogy egy irracionális számot eredményező művelet (négyzetgyökvonás) után kapott számot milyen pontosan adja vissza a float és a Decimal típus.

A decimal modul egy további lényeges jellemzője, hogy a számítási környezetet (kontextust) is meg lehet határozni, amelyben többek között a számítási pontosságot is be tudjuk állítani az igényeinknek megfelelően. Ezt láthatjuk az utolsó kódsorokban.

A decimal modul nagyon sok lehetőséget kínál a nagy pontosságot igénylő számítások végzéséhez, továbbá a decimális aritmetika számábrázolási ismeretei is szükségesek a megértéséhez és hatékony használatához. Ezért csupán a Python hivatalos dokumentációjára támaszkodva nem biztos, hogy egyszerű a megtanulása. Éppen ezért a Python tudásépítés lépésről lépésre című e-könyv egy teljes fejezetet szán e modulnak, és megpróbálja közérthetően tálalni a tudnivalókat számos példával, ábrával és táblázattal segítve a megértést.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.