Recorte 9: Aritmética exata e números racionais
Contents
Recorte 9: Aritmética exata e números racionais#
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
decimal
baseado 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.1999999999999997
A aritmética de ponto flutuante é sensível
0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17
O módulo
decimal
trabalha 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 Fraction
Fraction('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)