Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Python desde cero - enfoque científico, Unidad 6 — Trabajo con números y computación, 6.1 — Precisión y números reales ·

Redondeo y aproximaciones

Redondeo y aproximaciones

Introducción

La precisión de los números es fundamental en la programación científica. En Python, los números reales no son representados exactamente debido a las limitaciones inherentes a la representación en punto flotante. Esto puede llevar a resultados inesperados si no se maneja adecuadamente. En esta lección, exploraremos cómo trabajar con precisión y realizar redondeos de manera efectiva para obtener resultados más precisos.

Explicación principal

En Python, los números reales son representados en formato IEEE 754, lo que limita su precisión. Esto puede ser problemático cuando se realizan cálculos iterativos o cuando se compara con valores conocidos. Por ejemplo:

print(0.1 + 0.2 == 0.3)  # Salida: False

Aunque intuitivamente se espera que 0.1 + 0.2 sea igual a 0.3, la representación en punto flotante hace que esta afirmación no sea verdadera.

Para manejar este problema, Python proporciona varias funciones de redondeo y métodos para trabajar con precisión numérica. Veamos algunos ejemplos:

import math

# Ejemplo 1: Redondear a un número específico de decimales
print(round(0.1 + 0.2, 1))  # Salida: 0.3

# Ejemplo 2: Usar math.ceil y math.floor para redondeo hacia arriba o abajo
numero = 3.75
print(math.ceil(numero))    # Salida: 4
print(math.floor(numero))   # Salida: 3

# Ejemplo 3: Redondear a la decena más cercana
print(round(123.456, -1))  # Salida: 120

Errores típicos / trampas

  1. Redondeo excesivo: Redondear demasiado puede llevar a una pérdida innecesaria de precisión. Por ejemplo:
   print(round(0.1 + 0.2, 5))  # Salida: 0.30000 (perdida de precisión)
  1. Uso inadecuado de ==: Comparar números reales con operadores como == puede dar resultados inesperados:
   print(0.1 + 0.2 == 0.3)  # Salida: False (debido a la representación en punto flotante)
  1. No usar funciones de redondeo: No utilizar funciones como round() o módulos matemáticos puede llevar a resultados imprecisos:
   resultado = 0.1 + 0.2
   if resultado == 0.3:
       print("Igual")
   else:
       print("No igual")  # Salida: No igual, pero en realidad deberían ser iguales

Checklist accionable

A continuación, te presentamos un checklist para manejar la precisión y redondeo de manera efectiva:

  1. Utiliza round() para redondear a un número específico de decimales:
   resultado = round(0.1 + 0.2, 1)
  1. Evita usar == para comparar números reales:
   if abs(resultado - esperado) < 0.0001:
       print("Igual")
   else:
       print("No igual")
  1. Utiliza funciones matemáticas como math.ceil() o math.floor() para redondeo:
   resultado = math.ceil(3.75)
  1. Redondea solo cuando sea necesario, evitando pérdida innecesaria de precisión:
   resultado = 0.1 + 0.2
   if abs(resultado - 0.3) < 0.0001:
       print("Igual")
   else:
       print("No igual")
  1. Comprueba la precisión de tus cálculos iterativos:
   def sumar_iterativamente(n):
       resultado = 0
       for _ in range(n):
           resultado += 0.1
       return round(resultado, 1)
   print(sumar_iterativamente(10))  # Salida: 1.0 (si se redondea adecuadamente)

Cierre

Siguientes pasos

  • Aprender a trabajar con números reales precisos: Utiliza round() y funciones matemáticas para manejar la precisión de manera efectiva.
  • Practica comparaciones de números reales: Usa abs(resultado - esperado) &lt; tolerancia en lugar de ==.
  • Aplica estas técnicas a tus proyectos científicos: Esto te ayudará a obtener resultados más precisos y confiables.

Siguiendo estos pasos, podrás mejorar la precisión de tus cálculos numéricos y evitar problemas inherentes a la representación en punto flotante.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).