-
Notifications
You must be signed in to change notification settings - Fork 5
Punto flotante
Intentemos hacer una operacion sencilla, una suma
0.1 + 0.2
¿Qué obtiene? ¿0.3
? ¡No!
0.30000000000000004
¿Qué pasó?
Como la memoria de los ordenadores es limitada, no puedes almacenar números con precisión infinita, no importa si usas fracciones binarias o decimales: en algún momento tienes que cortar. Pero ¿cuánta precisión se necesita? ¿Y dónde se necesita? ¿Cuántos dígitos enteros y cuántos fraccionarios?
Para un ingeniero construyendo una autopista, no importa si tiene 10 metros o 10.0001 metros de ancho ─ posiblemente ni siquiera sus mediciones eran así de precisas.
Para alguien diseñando un microchip, 0.0001 metros (la décima parte de un milímetro) es una diferencia enorme ─ pero nunca tendrá que manejar distancias mayores de 0.1 metros.
Un físico necesita usar la velocidad de la luz (más o menos 300000000) y la constante de gravitación universal (más o menos 0.0000000000667) juntas en el mismo cálculo.
Para satisfacer al ingeniero y al diseñador de circuitos integrados, el formato tiene que ser preciso para números de órdenes de magnitud muy diferentes. Sin embargo, solo se necesita precisión relativa. Para satisfacer al físico, debe ser posible hacer cálculos que involucren números de órdenes muy dispares.
Básicamente, tener un número fijo de dígitos enteros y fraccionarios no es útil ─ y la solución es un formato con un punto flotante.
La idea es descomponer el número en dos partes:
- Una mantisa (también llamada coeficiente o significando) que contiene los dígitos del número. Mantisas negativas representan números negativos.
- Un exponente que indica dónde se coloca el punto decimal (o binario) en relación al inicio de la mantisa. Exponentes negativos representan números menores que uno.
Este formato cumple todos los requisitos:
- Puede representar números de órdenes de magnitud enormemente dispares (limitado por la longitud del exponente).
- Proporciona la misma precisión relativa para todos los órdenes (limitado por la longitud de la mantisa).
- Permite cálculos entre magnitudes: multiplicar un número muy grande y uno muy pequeño conserva la precisión de ambos en el resultado.
Los números de coma flotante decimales normalmente se expresan en notación científica.
Casi todo el hardware y lenguajes de programación utilizan números de punto flotante en los mismos formatos binarios, que están definidos en el estándar IEEE 754. Los formatos más comunes son de 32 o 64 bits de longitud total:
Formato | Bits totales | Bits significativos | Bits del exponente | Número más pequeño | Número más grande |
---|---|---|---|---|---|
Precisión sencilla | 32 | 23 + 1 signo | 8 | ~1.2 ⋅ 10-38 | ~3.4 ⋅ 1038 |
Precisión doble | 64 | 52 + 1 signo | 11 | ~5.0 ⋅ 10-324 | ~1.8 ⋅ 10308 |
Casi todas las plataformas asocian los float de Python a números de punto flotante de doble precisión del IEEE 754.
(Información adicional: http://puntoflotante.org)