Incluso las operaciones matemáticas más básicas a veces pueden dar un resultado erróneo. Esto sucede debido a las limitaciones en el almacenamiento del valor exacto de algunos números. Puedes superar estas limitaciones usando el módulo decimal en Python. Del mismo modo, ni el mates ni el cmath El módulo que aprendimos en nuestro último tutorial nos puede ayudar a hacer aritmética basada en fracciones. Sin embargo, el módulo de fracciones en Python hace exactamente eso.
En este tutorial, aprenderá acerca de estos módulos y las diferentes funciones que ofrecen.
Probablemente se esté preguntando por qué necesitamos un módulo para hacer aritmética básica con números decimales cuando ya podemos hacer lo mismo usando flotadores.
Antes de responder a esta pregunta, quiero que adivines el valor de salida si escribes 0.1 + 0.2
En la consola de Python. Si supuso que la salida debería ser 0.3, se sorprenderá cuando revise el resultado real, que es 0.30000000000000004. Puedes probar algún otro cálculo como 0.05 + 0.1
y obtendrás 0.15000000000000002.
Para entender lo que está pasando aquí, trata de representar 1/3
en formato decimal, y notará que el número en realidad no termina en la base 10. De manera similar, algunos números como 0.1 o 1/10 no tienen terminación en la base 2. Dado que estos números aún deben estar representados de alguna manera, algunos Las aproximaciones se hacen almacenándolas, lo que resulta en esos errores..
El número 0.30000000000000004 es en realidad muy cercano a 0.3, por lo que podemos evitar esta aproximación la mayor parte del tiempo. Desafortunadamente, esta aproximación no lo reducirá cuando esté simulando un lanzamiento de satélite o tratando con dinero. Otro problema con estas aproximaciones es que los errores siguen acumulándose.
Para obtener resultados precisos como los que estamos acostumbrados a hacer cuando hacemos cálculos a mano, necesitamos algo que admita aritmética de coma flotante decimal rápida, correctamente redondeada, y decimal módulo hace exactamente eso.
Antes de usar el módulo, necesita importarlo primero. Después de eso, puede crear decimales a partir de enteros, cadenas, flotadores o tuplas. Cuando el decimal se construye a partir de un entero o un flotante, hay una conversión exacta del valor de ese número. Echa un vistazo a los ejemplos a continuación para ver lo que quiero decir:
desde decimal importar Decimal Decimal (121) # devuelve Decimal ('121') Decimal (0.05) # devuelve Decimal ('0.05000000000000000277555756') Decimal ('0.05') # devuelve Decimal ('0.05') Decimal ((0, (8, 3, 2, 4), -3)) # devuelve Decimal ('8.324') Decimal ((1, (8, 3, 2, 4), -1)) # devuelve Decimal ('- 832.4')
Como puedes ver, el valor de Decimal (0.05)
es un poco diferente de Decimal ('0.05')
. Esto significa que cuando sumas 0.05 y 0.1, debes usar decimal.decimal ('0.05')
y decimal.decimal ('0.1')
construir los decimales.
desde decimal importar Decimal Decimal ('0.05') + Decimal ('0.1') # devuelve Decimal ('0.15') Decimal (0.05) + Decimal (0.1) # devuelve Decimal ('0.1500000000000000083266726847')
Ahora que puede realizar varias operaciones en decimales, es posible que desee controlar la precisión o el redondeo de esas operaciones. Esto se puede hacer usando el getcontext ()
función. Esta función le permite obtener, así como establecer el valor de las opciones de precisión y redondeo, entre otras cosas.
Tenga en cuenta que tanto el redondeo como la precisión solo entran en juego durante las operaciones aritméticas y no mientras crea los decimales..
importar decimal de decimal importar decimal, getcontext Decimal (1) / Decimal (13) # devuelve Decimal ('0.07692307692307692307692307692') getcontext (). prec = 10 Decimal (0.03) # devuelve Decimal ('0.02999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 - - -) (7) # devuelve Decimal ('0.1428571429') getcontext (). Rounding = decimal.ROUND_DOWN Decimal (1) / Decimal (7) # devuelve Decimal ('0.1428571428')
También puedes usar algunas de las funciones matemáticas como sqrt ()
, exp ()
, y Iniciar sesión()
con decimales. Aquí están algunos ejemplos:
importar decimal desde decimal importar decimal, getcontext Decimal (2) .sqrt () # devuelve Decimal ('1.414213562373095048801688724') getcontext (). prec = 4 Decimal ('2'). sqrt () # devuelve Decimal ('1.414') Decimal ('2000'). Log10 () # devuelve Decimal ('3.301')
A veces, puede enfrentar situaciones en las que necesita realizar varias operaciones en fracciones o el resultado final debe ser una fracción. El módulo de fracciones puede ser de gran ayuda en estos casos. Te permite crear una Fracción
instancia de números, flotadores, decimales e incluso cadenas. Al igual que el módulo decimal, también existen algunos problemas con este módulo cuando se trata de crear fracciones a partir de flotadores. Aquí están algunos ejemplos:
de fracciones importar Fracción de decimal importar Fracción decimal (11, 35) # devuelve Fracción (11, 35) Fracción (10, 18) # devuelve Fracción (5, 9) Fracción ('8/25') # devuelve Fracción (8, 25) Fracción (1.13) # devuelve Fracción (1272266894732165, 1125899906842624) Fracción ('1.13') # devuelve Fracción (113, 100) Fracción (Decimal ('1.13')) # devuelve Fracción (113, 100)
También puede realizar operaciones matemáticas simples como la suma y la resta en fracciones al igual que los números regulares.
de las fracciones de importación Fracción Fracción (113, 100) + Fracción (25, 18) # retornos Fracción (2267, 900) Fracción (18, 5) / Fracción (18, 10) # retornos Fracción (2, 1) Fracción (18, 5) * Fracción (16, 19) # devuelve Fracción (288, 95) Fracción (18, 5) * Fracción (15, 36) # devuelve Fracción (3, 2) Fracción (12, 5) ** Fracción (12, 10) # devuelve 2.8592589556010197
El módulo también tiene algunos métodos importantes como limit_denominator (max_denominator)
que encontrará y devolverá una fracción más cercana en valor a la fracción dada cuyo denominador es como máximo max_denominator
. También puede devolver el numerador de una fracción dada en el término más bajo usando el numerador
propiedad y el denominador mediante el uso de la denominador
propiedad.
from fractions import Fraction Fraction ('3.14159265358979323846') # devuelve Fraction (157079632679489661923, 50000000000000000000) Fraction ('3.14159265accitación de la clase de la clase de la fracción de la fracción de la fracción (' 3.14159265acc. Fracción (311, 99) Fracción ('3.14159265358979323846'). Limit_denominator (10) # devuelve Fracción (22, 7) Fracción (125, 50) .numerador # devuelve 5 Fracción (125, 50) .denominador # devuelve 2
También puede utilizar este módulo con varias funciones en el mates Módulo para realizar cálculos basados en fracciones..
importar matemáticas desde fracciones importar Fracción math.sqrt (Fraction (25, 4)) # devuelve 2.5 math.sqrt (Fraction (28,3)) # devuelve 3.0550504633038935 math.floor (Fraction (3558, 1213)) # devuelve 2 Fraction ( math.sin (math.pi / 3)) # devuelve Fraction (3900231685776981, 4503599627370496) Fraction (math.sin (math.pi / 3)). limit_denominator (10) # devuelve Fraction (6, 7)
Estos dos módulos deberían ser suficientes para ayudarlo a realizar operaciones comunes tanto con decimales como con fracciones. Como se muestra en la sección anterior, puede usar estos módulos junto con el módulo matemático para calcular el valor de todos los tipos de funciones matemáticas en el formato que desee.
En el próximo tutorial de la serie, aprenderás sobre el aleatorio módulo en Python.