Em Python, os módulos decimal e fractions oferecem alternativas para manipulação numérica por meio de aritmética exata e números racionais. Aqui temos aplicações simples de cada um.
decimal¶
from decimal import *Módulo
decimalbaseado no modelo de ponto flutuante, mas focado na aritmética computacional que equivale à feita por humanos.
Exemplo de operação que destoa da prática. Deveríamos ter objetivamente 2.2
0.3 + 1.9 2.1999999999999997A aritmética de ponto flutuante é sensível
0.1 + 0.1 + 0.1 - 0.35.551115123125783e-17O módulo
decimaltrabalha com exatidão, dentro
getcontext().prec = 16
Decimal(0.3) + Decimal(1.9)Decimal('2.200000000000000')## ?
Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)Decimal('1.110223024625157E-17')getcontext().prec = 60
Decimal(1) / Decimal(7)Decimal('0.142857142857142857142857142857142857142857142857142857142857')getcontext()Context(prec=60, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[Inexact, Rounded], traps=[InvalidOperation, DivisionByZero, Overflow])fractions¶
Módulo que fornece suporte à representação de números racionais (frações).
from fractions import FractionFraction('0.1')Fraction(1, 10)Fraction(Decimal('0.1'))Fraction(1, 10)Fraction(32, 16), Fraction(16,32)(Fraction(2, 1), Fraction(1, 2))Fraction('8/7')Fraction(8, 7)