Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python

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

by
Difficulty:IntermediateLength:ShortLanguages:
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
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.