Diferencia entre flotante y doble, cuál debería usar?

Diferencia entre flotante y doble, cuál debería usar?

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

Muchos programadores / estudiantes de novatos que están inscritos en informática hacen las preguntas frecuentes que son relevantes para el campo particular dentro de la informática 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, incluidas las binario, decimal, octal y hexadecimal sistema. Estos son los formatos de número de computadora que son las representaciones internas de los valores numéricos en las 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 (i.mi., 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álculo/número en cualquier tipo de operación. Una vez que el sistema numérico se define en el aula (a menudo mal), los estudiantes están tentados a pasar a los diferentes formatos de números dentro del mismo tipo (i.mi., 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 Flotar y Doble, y mientras apuntan a las mismas necesidades (yo.mi., aritmética de punto flotante), hay bastante diferencia en su representación interna y efecto general en el cálculo del programa. Es lamentable que muchos programadores pierdan los matices entre los tipos de datos planos y dobles, y terminan mal uso en lugares donde no deben usarse en primer lugar. En última instancia, lo que resulta en errores de cálculo en otras partes del programa.

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

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

Float y Double 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, dieciséis.23, 10.2, etc., no son números enteros (yo.mi., 2, 5, 15, etc.), por lo tanto, requieren la consideración de fracciones en el binario. Como los números decimales resultantes (i.mi., 20.123, dieciséis.23, etc.) no se puede representar fácilmente con un formato binario normal (i.mi., Entero). La principal diferencia entre el flotador y el doble es que el primero es el tipo de punto flotante de precisión (32 bits), mientras que el segundo es el tipo de datos de punto flotante de doble precisión (64 bits). 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), entonces las inexactitudes serán más pequeñas en el doble y no perderá mucha precisión.

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

#incluir

int main ()

flotante num1 = 1.f / 82;

flotante 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.999999999999983

Aquí, puede ver que la ligera diferencia en la precisión del flotador y el doble da una respuesta completamente diferente, aunque el doble parece ser más precisa que la flotación.

El siguiente es 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í, puede ver que la respuesta en doble tiene una mejor precisión.

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

Raramente hay una razón para usar flotante en lugar de duplicar en el código dirigido a las computadoras modernas. La precisión adicional en doble se reduce, pero no elimina, la posibilidad de redondear errores u otra imprecisión que pueda causar problemas en otras partes del programa. Muchas funciones u operadores matemáticos se convierten y devuelven el doble, por lo que no necesita devolver los números a flotar, ya que eso podría perder la precisión. Para un análisis detallado sobre aritmética de punto flotante, le recomiendo que lea este increíble artículo (http: // documentos.oráculo.com/cd/E19957-01/806-3568/ncg_goldberg.html).

Resumen

Entonces ... en pocas palabras:

Lugares donde debes usar flotante:

  • Si está dirigido al hardware donde la precisión única es más rápida que la doble precisión.
  • Su aplicación hace un gran uso 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 especiales de CPU (i.mi., SSE, SSE2, AVX, etc.) que funcionan en múltiples números / matrices / vectores a la vez.

Conclusión

En este artículo he destacado la diferencia entre flotante y doble, y cuál debe 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 se dirige a las computadoras modernas, ya que las posibilidades de baja eficiencia debido al uso de la aritmética de punto flotante doble son altamente improbables. Si tiene alguna pregunta, entonces puede hacer en la sección de comentarios a continuación!