025.- Curso C++ Básico. Los Float point o números de punto flotante.
Introducción a los Números de Punto Flotante
Concepto de Números de Punto Flotante
- Los números de punto flotante se utilizan en programación para almacenar números con componentes fraccionarios y grandes, empleando notaciones científicas.
- En español, se les llama "números de coma flotante", pero en inglés y C++ se utiliza el punto como separador decimal.
Tipos de Datos de Punto Flotante
- Existen tres tipos principales:
float,doubleylong double. C++ no define tamaños exactos, solo garantiza mínimos.
- En arquitecturas modernas, un
floatocupa 4 bytes, undouble8 bytes y unlong doubleentre 8 y 16 bytes. Todos son signados.
Uso Correcto de Literales
- Es importante incluir al menos un lugar decimal en literales para que el compilador reconozca que son números de punto flotante.
- Se debe evitar usar literales enteros donde se requieren literales de punto flotante para prevenir conversiones innecesarias.
Ejemplos Prácticos y Notación Científica
Comportamiento del Compilador
- Al imprimir un número como
5.0, si la parte fraccionaria es cero, el compilador puede omitirla.
- La notación científica se presenta cuando los números son muy grandes; por ejemplo, 9 millones puede representarse como 9 times 10^6.
Limitaciones en Representación Decimal
- Las computadoras tienen limitaciones en la representación decimal; por ejemplo, 1/3 es aproximadamente 0.33333, lo que plantea problemas con precisión infinita.
Precisión en Números de Punto Flotante
Determinación de Precisión
- La precisión predeterminada para salida estándar (
std::cout) es generalmente 6 dígitos significativos.
- Los diferentes tipos tienen distintas precisiones:
float: entre 3 a 7 dígitos,
double: entre 15 a 18 dígitos,
long double: hasta 33 dígitos dependiendo del tamaño.
Manipulación de Salida
- Se puede modificar la precisión usando manipuladores como
std::setprecision(), permitiendo establecer una mayor cantidad de dígitos significativos al imprimir.
Problemas Comunes con Números Flotantes
Errores por Redondeo
- Los problemas no solo afectan a fracciones sino también a números con muchos dígitos significativos; esto puede resultar en errores conocidos como errores de redondeo.
Errores de Redondeo en Números de Punto Flotante
Uso Preferente del Tipo Doble
- Se recomienda utilizar el tipo de dato
dublesobrefloatpara evitar errores de redondeo, ya que los números flotantes pueden provocar problemas debido a su representación binaria.
Problemas de Precisión con Punto Flotante
- Al asignar 0.1 a un número de punto flotante, se presentan problemas de precisión. Aunque se espera obtener 0.1, la representación en memoria puede truncar el valor debido a limitaciones.
Consecuencias de los Errores de Redondeo
- Los errores de redondeo pueden resultar en valores inesperados; por ejemplo, al sumar 10 veces 0.1, el resultado no es exactamente 1 como se esperaría.
Comparación y Operaciones Matemáticas
- Comparar números de punto flotante es problemático debido a su inexactitud inherente. Las operaciones matemáticas pueden amplificar estos errores y causar resultados erróneos.
Naturaleza Inherente del Error
- Los errores de redondeo son comunes y no excepcionales en tipos flotantes; nunca se debe asumir que estos números son exactos, especialmente en contextos financieros.
Categorías Especiales: INF y NaN
- Existen dos categorías especiales:
INF(infinito positivo o negativo) yNaN(no es un número), que pueden comportarse diferente según el compilador utilizado.
Buenas Prácticas al Usar Números Flotantes
- Es recomendable evitar divisiones por cero y ser consciente que los números flotantes son útiles pero propensos a pequeños errores que pueden afectar comparaciones significativas.
Resumen Final sobre Números Flotantes