Diferencia entre flotación y doble ¿cuál debo usar?

(Nota: este artículo asume que los lectores conocen los conceptos básicos de la informática)

Muchos programadores / estudiantes novatos que están inscritos en Ciencias de la Computación hacen las preguntas frecuentes que son relevantes para el campo particular dentro de la Ciencia de la Computación que estudian. La mayoría de los cursos para principiantes comienzan con los temas del sistema numérico que se utiliza en las computadoras modernas, incluido el binario, decimal, octal y hexadecimal sistema. Estos son los formatos de número de computadora que son las representaciones internas de valores numéricos en computadoras (o calculadoras y cualquier otro tipo de computadoras digitales). Estos valores se almacenan como “agrupación de bits”.

Como sabemos, las computadoras representan datos en conjuntos de dígitos binarios (es decir, en la combinación de 1s y 0s, como, 1111 representa 15 en el sistema decimal), tiene sentido enseñar sobre los diferentes formatos de números que se utilizan para representar un rango dinámico de valores, ya que constituyen los bloques básicos del procesamiento de cálculos / números en cualquier tipo de operación. Una vez que el sistema numérico se define en el aula (a menudo de forma deficiente), los estudiantes se ven tentados a pasar a los diferentes formatos numéricos dentro del mismo tipo (es decir,., aritmética de punto flotante) que tienen cierta precisión y rango de números. Por lo tanto, se ven obligados a aprender los matices entre ciertos tipos. Dos de los tipos de datos más utilizados son Flotador y Doble, y mientras se dirigen a las mismas necesidades (es decir,., aritmética de punto flotante), hay una cierta diferencia en su representación interna y el efecto general en el cálculo en el programa. Es desafortunado que muchos programadores se pierdan los matices entre los tipos de datos Flat y Double, y terminen haciendo mal uso de ellos en lugares donde no deberían usarse en primer lugar. En última instancia, se producen errores de cálculo en otras partes del programa.

En este artículo, les voy a decir la diferencia entre flotar y duplicar con los ejemplos de código en lenguaje de programación C. Empecemos!

Flotador vs doble ... ¿Cuál es el trato?

Flotante y Doble son la representación de datos que se utilizan para las operaciones aritméticas de punto flotante, piense en los números decimales que calcula en la clase de matemáticas, como, 20.123, 16.23, 10.2, etc., no son números enteros (es decir,., 2, 5, 15, etc.), por lo que requieren la consideración de fracciones en el binario. Como los números decimales resultantes (es decir,., 20.123, 16.23, etc.) no se puede representar fácilmente con un formato binario normal (es decir, Integer). La principal diferencia entre Float y Double es que el primero es el dato de punto flotante de precisión simple (32 bits), mientras que el segundo es el tipo de dato de punto flotante de precisión doble (64 bit). El doble se llama "doble" porque es básicamente una versión de doble precisión de Float. Si está calculando una gran cantidad (piense en los miles de 0 en el número), las inexactitudes serán más pequeñas en el Doble y no perderá mucha precisión..

Es mejor elaborar utilizando los ejemplos de código. La siguiente es la operación en Float y Double a través de las funciones matemáticas proporcionadas en lenguaje C:

#incluir

int main ()

float num1 = 1.f / 82;

float num2 = 0;

para (int i = 0; i < 738; ++i)

num2 + = num1;

printf ("%. 7g \ n", num2);

doble num3 = 1.0 / 82;

doble num4 = 0;

para (int i = 0; i < 738; ++i)

num4 + = num3;

printf ("%. 15g \ n", num4);

getchar ();

Imprime lo siguiente:

9.000031

8.99999999999983

Aquí, puedes ver que la ligera diferencia en la precisión de Float y Double da una respuesta totalmente diferente, aunque Double parece ser más preciso que Float.

A continuación se muestra el ejemplo de la función sqrt () en C:

#incluir

#incluir

int main ()

float num1 = sqrt (2382719676512365.1230112312312312);

doble num2 = sqrt (2382719676512365.1230112312312312);

printf ("% f \ n", num1);

printf ("% f \ n", num2);

getchar ();

Da la siguiente salida:

48813108.000000

48813109.678778

Aquí, puedes ver que la respuesta en Doble tiene una mejor precisión..

En general, es mejor usar Double para la aritmética de punto flotante, ya que varias funciones matemáticas estándar en C operan en Double y las computadoras modernas son extremadamente rápidas y eficientes para los cálculos de punto flotante Double. Esto lleva a reducir la necesidad de usar Float, a menos que necesite operar con muchos números de punto flotante (piense en grandes arreglos con miles de 0 en los números) o esté operando en un sistema que no admite doble punto flotante de precisión, ya que muchas GPUs, dispositivos de baja potencia y ciertas plataformas (ARM Cortex-M2, Cortex-M4, etc.) no son compatibles con Double aún, entonces debe usar Float. Además, una cosa que debe recordar es que ciertas GPU / CPU funcionan mejor o son más eficientes en el procesamiento flotante, como en el cálculo de vectores / matriz, por lo que es posible que deba consultar el manual / documentación de especificaciones de hardware para decidir mejor cuál debe usar para una máquina en particular.

Rara vez hay una razón para usar Flotante en lugar de Doble en el código que apunta a las computadoras modernas. La precisión adicional en Doble reduce, pero no elimina, la posibilidad de redondear errores u otras imprecisiones que pueden causar problemas en otras partes del programa. Muchas funciones matemáticas u operadores convierten y devuelven el valor Doble, por lo que no es necesario volver a convertir los números en Flotante, ya que podría perder la precisión. Para un análisis detallado de la aritmética de punto flotante, te recomiendo que leas este impresionante artículo (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html).

Resumen

Así que ... en pocas palabras:

Lugares donde debes usar Flotador:

  • Si está apuntando a un hardware donde la precisión simple es más rápida que la precisión doble.
  • Su aplicación hace un uso intensivo de la aritmética de punto flotante, como miles de números con miles de 0.
  • Estás haciendo una optimización de muy bajo nivel. Por ejemplo, está utilizando instrucciones de CPU especiales (es decir, SSE, SSE2, AVX, etc.) que operan en múltiples números / matrices / vectores a la vez.

Conclusión

En este artículo, he resaltado la diferencia entre Flotación y Doble, y cuál debería usarse en lugares específicos. Podría decirse que es mejor usar el doble en la mayoría de los lugares a ciegas, especialmente si está apuntando a computadoras modernas, ya que las posibilidades de baja eficiencia debido al uso de la aritmética de doble punto flotante es muy poco probable. Si tiene alguna pregunta, puede hacerla en la sección de comentarios a continuación.!