Con frecuencia, en mi experiencia en programación, necesito tomar una decisión si debo usar flotante o doble para mis números reales. A veces voy a flotar, a veces voy por el doble, pero realmente esto se siente más subjetivo. Si me confrontaran para defender mi decisión, probablemente no daría buenas razones.
¿Cuándo usas flotador y cuándo usas doble? ¿Siempre usas el doble, solo cuando existen limitaciones de memoria vas a flotar? ¿O usa siempre flotante a menos que el requisito de precisión requiera que use doble? ¿Existen algunas diferencias sustanciales con respecto a la complejidad computacional de la aritmética básica entre flotante y doble? ¿Cuáles son las ventajas y desventajas de usar flotador o doble? ¿Y has usado incluso el doble largo?
fuente
Respuestas:
La opción predeterminada para un tipo de punto flotante debería ser
double
. Este es también el tipo que se obtiene con los literales de punto flotante sin un sufijo o (en C) funciones estándar que operan sobre números de punto flotante (por ejemploexp
,sin
, etc.).float
solo debe usarse si necesita operar con muchos números de punto flotante (piense en el orden de miles o más) y el análisis del algoritmo ha demostrado que el rango y la precisión reducidos no representan un problema.long double
puede usarse si necesita más alcance o precisión quedouble
, y si lo proporciona en su plataforma de destino.En resumen,
float
ylong double
debe reservarse para el uso de los especialistas, con el usodouble
de "todos los días".fuente
float
(y ocasionalmente la mitad de precisión) porque ni el ojo humano, la pantalla o el sistema de color tienen tantos bits de precisión . Este consejo es aplicable para, por ejemplo, OpenGL, etc. Este consejo adicional no se aplica a las imágenes médicas, que tienen requisitos de precisión más estrictos.Raramente hay causa para usar flotante en lugar de doble en el código dirigido a computadoras modernas. La precisión adicional reduce (pero no elimina) la posibilidad de errores de redondeo u otras imprecisiones que causen problemas.
Las principales razones por las que puedo pensar en usar float son:
Entonces, básicamente, el doble es el camino a seguir a menos que tenga limitaciones de hardware o que el análisis haya demostrado que almacenar números de doble precisión está contribuyendo significativamente al uso de la memoria.
fuente
Úselo
double
para todos sus cálculos y variables temporales. Úselofloat
cuando necesite mantener una matriz de númerosfloat[]
(si la precisión es suficiente), y se trata de más de decenas de miles defloat
números.Muchas / la mayoría de las funciones u operadores matemáticos convierten / devuelven
double
, y no desea volver a convertir los númerosfloat
para ningún paso intermedio.Por ejemplo, si tiene una entrada de 100,000 números de un archivo o una secuencia y necesita ordenarlos, coloque los números en a
float[]
.fuente
Algunas plataformas (ARM Cortex-M2, Cortex-M4, etc.) no admiten el doble (siempre se puede verificar en el manual de referencia de su procesador. Si no hay advertencias o errores de compilación, no significa que el código sea óptimo. doble puede ser emulado). Es por eso que es posible que deba apegarse a int o float .
Si ese no es el caso, usaría el doble .
Puede consultar el famoso artículo de D. Goldberg ("Lo que todo informático debe saber sobre la aritmética de coma flotante"). Debería pensarlo dos veces antes de usar la aritmética de punto flotante. Existe una gran posibilidad de que no sean necesarios en su situación particular.
http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf
fuente
Para problemas del mundo real, el umbral de muestreo de sus datos es importante al responder esta pregunta. Del mismo modo, el ruido de fondo también es importante. Si cualquiera de los dos supera su selección de tipo de datos, no se obtendrá ningún beneficio al aumentar la precisión.
La mayoría de los muestreadores del mundo real están limitados a DAC de 24 bits. Sugerir que 32 bits de precisión en los cálculos del mundo real debe ser adecuado donde el significado es de 24 bits de precisión.
La doble precisión tiene el costo de 2x de memoria. Por lo tanto, limitar el uso de dobles sobre flotadores podría reducir drásticamente la huella de memoria / ancho de banda de las aplicaciones en ejecución.
fuente
La elección de qué variable usar entre flotante y doble depende de la precisión de los datos requeridos. Si se requiere que una respuesta tenga una diferencia insignificante con respecto a la respuesta real, el número de lugares decimales requeridos será mayor, por lo tanto, dictará que el doble esté en uso. Flotador cortará algunas partes de lugares decimales, reduciendo así la precisión.
fuente
Por lo general, uso el
float
tipo cuando no necesito mucha precisión, por ejemplo, por dinero, lo cual está mal, pero es lo que estoy acostumbrado a hacer mal.Por otro lado, lo uso
double
cuando necesito más precisión, por ejemplo, para algoritmos matemáticos complejos.El estándar C99 dice esto:
Realmente nunca usé
long double
, pero no uso tanto C / C ++. Por lo general, uso lenguajes de tipo dinámico como Python, donde no tiene que preocuparse por los tipos.Para obtener más información sobre Double vs Float , consulte esta pregunta en SO .
fuente
Decimal
es un tipo de punto flotante y suele ser una buena opción para los cálculos de dinero.