Advertisement
  1. Code
  2. Python

Módulos Matemáticos en Python: Decimales y Fracciones

Scroll to top
Read Time: 5 min
This post is part of a series called Mathematical Modules in Python.
Mathematical Modules in Python: Random
Mathematical Modules in Python: Statistics

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Incluso las operaciones matemáticas más básicas pueden dar algunas veces un resultado erróneo. Esto sucede debido a limitaciones en almacenar el valor exacto de algunos números. Puedes superar estas limitaciones usando el módulo decimal en Python. De manera similar, ni el módulo math ni el cmath que aprendimos en el último tutorial pueden ayudarnos haciendo aritmética basada en fracciones. Sin embargo, el módulo de fracciones en Python hace exactamente eso.

En este tutorial, aprenderás sobre ambos módulos y las diferentes funciones que hacen disponibles.

¿Por Qué Necesitamos un Módulo Decimal?

Probablemente te estés preguntando por qué necesitamos un módulo para hacer aritmética básica con números decimales cuando ya podemos hacer lo mismo usando flotantes.

Antes de responder esta pregunta, quiero que adivines el valor resultante si tecleas 0.1 + 0.2 en la consola de Python. Si adivinaste que la salida debería ser 0.3, te sorprenderás cuando revises el resultado real, que es 0.30000000000000004. Puedes intentar algunos otros cálculos como 0.05 + 0.1 y obtendrás 0.15000000000000002.

Para entender qué está pasando aquí, intenta representar 1/3 en forma decimal, y notarás que el número es de hecho no determinante en base 10. De manera similar, algunos números como 0.1 o 1/10 son no determinantes en base 2. Ya que estos números aún necesitan ser representados de alguna forma, unas cuantas aproximaciones son realizadas mientras se almacenan, lo que resulta en esos errores.

El número 0.30000000000000004 es de hecho bastante cercano a 0.3. así que podemos salirnos con esta aproximación la mayoría del tiempo. Desafortunadamente, esta aproximación no va a servir cuando estés simulando un lanzamiento de satélite o lidiando con dinero. Otro problema con estas aproximaciones es que los errores se siguen apilando.

Para obtener resultados precisos como a los que estamos acostumbrados cuando se hacen cálculos a mano, necesitamos algo que soporte aritmética decimal de punto flotante rápida y correctamente redondeada, y el módulo decimal hace exactamente eso.

Usando el Módulo Decimal

Antes de usar el módulo, necesitas importarlo primero. Después de eso, puedes crear decimales desde enteros, cadenas, flotantes o tuplas. Cuando el decimal es construido desde un entero o un flotante, hay una conversión exacta del valor de ese número. Echa un vistazo a los ejemplos de abajo para ver a qué me refiero:

Como puedes ver, el valor de Decimal (0.05) es ligeramente diferente de Decimal ('0.05'). Esto significa que cuando sumas 0.05 y 0.1, deberías usar decimal.Decimal('0.05')decimal.Decimal('0.1') para construir los decimales.

Ahora que puedes realizar varias operaciones sobre decimales, podrías querer controlar la precisión del redondeo para esas operaciones. Esto puede ser hecho usando la función getcontext(). Esta función también te permite establecer el valor de las opciones de precisión y redondeo, entre otras cosas.

Por favor ten en mente que tanto como el redondeo y la precisión entran en juego solo durante operaciones aritméticas y no mientras estás creando los decimales mismos.

También puedes usar algunas funciones matemáticas como sqrt()exp(), y log() con decimales. Aquí hay algunos ejemplos.

Usando el Modulo Fracciones

Algunas veces, podrías encarar situaciones en donde necesitas realizar varias operaciones en fracciones o el resultado final necesita ser una fracción. El módulo fracciones puede ser de gran ayuda en estos casos. Este te permite crear una instancia Fraction desde números, flotantes, decimales e incluso cadenas. Justo como el módulo decimal, hay algunos problemas con este módulo también cuando de trata de crear fracciones desde flotantes. Aquí hay unos cuantos ejemplos:

También puedes realizar operaciones matemáticas simples como suma y resta de fracciones justo como números regulares.

El módulo también tiene algunos cuántos métodos importantes como limit_denominator(max_denominator) el cuál encontrará y regresará una fracción más cercana en valor a la fracción dada cuyo denominador es a lo mucho max_denominator. También puedes regresar el numerador de una fracción dada en el término más bajo usando la propiedad numerator y el denominador usando la propiedad denominator.

También puedes usar este módulo con varias funciones en el módulo math para realizar cálculos basados en fracciones.

Ideas Finales

Estos dos módulos deberían ser suficientes para ayudarte a realizar operaciones comunes tanto con decimales como con fracciones. Como se muestra en la última sección, puedes usar estos módulos junto con el módulo de math para calcular el valor de todos los tipos de funciones matemáticas en el formato que desees.

En el siguiente tutorial en la serie, aprenderás acerca del módulo random en 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
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.