7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Python

Módulos Matemáticos em Python: Decimal e Frações

Read Time: 4 mins
This post is part of a series called Mathematical Modules in Python.
Mathematical Modules in Python: Random
Mathematical Modules in Python: Statistics

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Até as operações matemáticas mais básicas podem, retornar valores errados. Isso é pelas limitações no armazenamento do valor de alguns números. Podemos passar pelas limitações usando o módulo decimal de Python. De forma similar, nem math ou cmath, que vimos no tutorial anterior, podem nos ajudar em aritimética de frações. Contudo, o módulo fractions do Python consegue.

Nesse tutorial, aprenderemos ambos os módulos e as diferentes funções disponíveis.

Por Que Precisamos de um Módulo Decimal?

Devemos nos perguntar o porque de precisar de um módulo para cálculos aritiméticos basico com números decimais quando já podemos usar pontos flutuantes.

Antes de responder a pergunta, gostaríamos que tentassem adivinhar o retorno de 0.1 + 0.2 se usando no console do Python. Se dissermos 0.3, tomaremos um susto ao verificar o resultado, que é 0.30000000000000004. Podemos tentar outros cálculos, como 0.05 + 0.1 que dá 0.15000000000000002.

Para entender o que acontece, tentemos representar 1/3 na forma decimal e percebamos que é uma dízima períodica na base 10. De forma similar, números como 0.1 (1/10) são dízimas periódicas na base 2. Como esse números ainda precisam de alguma representação, algumas aproximações são feitas durante seus armazenamentos, resultando em erros.

O número 0.30000000000000004 é bem próximo de 0.3, assim podemos esquecer a aproximação na maioria dos casos. Infelizmente, essa aproximação não pode passar quando simulamos o lançamento de um satélite ou lidando com dinheiro. Outro problema dessas aproximações é que os erros viram uma bola de neve.

Para obter resultados precisos como os que temos quando realizamos os cálculos à mão, precisamos de algo que suporte cálculo artitimético de pontos flutuantes rápidos e arredondados corretamente, e o módulo decimal faz isso.

Usando o Módulo Decimal

Antes de usá-lo, devemos importá-lo primeiro. Depois, podemos criar decimais a partir de inteiros, pontos flutuantes, cadeias de caracteres ou tuplas. Quando o decimal é criado de um inteiro ou ponto flutuante, a conversão é exata do valor para o número. Vejamos os exemplo abaixos para entender melhor:

Como vemos, o valor Decimal(0.05) é um pouco diferente de Decimal('0.05'). Isso significa que ao adicionar 0.05 e 0.1, devemos usar decimal.Decimal('0.05') e decimal.Decimal('0.1') para criar os decimais.

Agora que podemos realizar várias operações em decimais, queremos controlar a precisão ou arredondamento das operações. Isso pode ser feito usando a função getcontext(). Essa função permite-nos tanto obter quando configurar o valor da precisão e arredondamento, e outras coisas.

Tenhamos em mente que tanto arredondamento e precisão entram em jogo durante operações aritiméticas e não apenas quando criamos decimais em si.

Também podemos usar algumas funções matemáticas como sqrt(), exp() e log() com decimais. Eis alguns exemplos:

Usando o Módulo Fractions

Algumas vezes, lidamos com sitações onde precisamos realizar várias operações em franções ou o resultdo final precisa ser uma fração. O módulo fração pode ser de muita ajuda nessas horas. Ele permite criar uma instância de Fraction a partir de números, pontos flutuantes, decimais e até cadeias de caracteres. Como o módulo decimal, há alguns problemas ao criar frações a partir de pontos flutuantes. Eis alguns exemplos:

Também realizamos operações matemáticas simples (adição e subtração) em frações, como em números normais.

O modulo também possui alguns métodos importantes como limit_denominator(max_denominator) que encontrará e retornará a fração mais próxima de uma fração cujo denominar é, no máximo, max_denominator. Também podemos retornar o numerador de uma fração no menor termo, usando a propriedade numerator, e o denominador usando a propriedade denominator.

Também podemos usar o módulo com várias funções de math para realizar cálculos de frações.

Pensamentos Finais

Esse dois módulos devem ser suficientes para ajudar a realizar operações comuns tanto em decimais quanto frações. Como vimos na última seção, podemos usá-los junto do módulo math para calcular o valor de todo tipo de função matemática no formato desejado.

No próximo tutorial da série, aprenderemos sobre o módulo random em Python.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.