jueves, 25 de julio de 2013

double vs decimal en C#

Tabla de Contenido

0. Introducción
1. Rendimiento
2. Conclusiones
3. Glosario
4. Referencias

0. Introducción

Los tipos de datos numéricos de punto flotante como float y double son útiles para cálculos científicos (coordenadas espaciales, mediciones sobre magnitudes físicas que requieren alta precisión); el tipo float es utilizado para la creación de librerías de gráficos, double para representación de números reales.

Por otro lado, el tipo decimal es útil para cálculo financiero y también para valores resultantes de operaciones hechas por el mismo hombre en lugar de valores obtenidos de mediciones de la naturaleza.

En la Tabla 1 se incluyen algunas de las diferencias importantes de estos tres tipos de datos numéricos.
Resumen de diferencias de tipos punto flotante y decimal.
Tabla 1. Resumen de diferencias de tipos punto flotante y decimal [5].

1. Rendimiento

Entre las consideraciones de rendimiento de los tipos de punto flotante y el tipo decimal se tienen las siguientes:
  • La aritmética de punto flotante es significativamente mayor, debido a que está soportada directamente por el hardware adyacente.
  • La aritmética con datos de tipo decimal es tratada en base 10 (decimal) y manejada directamente por software. Esto la hace varias veces más lenta. Esto recae en reducción del rendimiento de la aplicación de forma considerable.
En el siguiente código en lenguaje C# presento una versión rudimentaria de prueba de rendimiento, que consiste en generar números pseudoaleatorios para los tipos double y decimal, luego se calcula la suma de todos los aleatorios generados, y se toma el tiempo en milisegundos, y se presentan estos resultados:
Resultados de las pruebas:
Ejecución no. 1 double vs decimal.
Figura 1. Ejecución prueba no. 1 double vs decimal.
Ejecución no. 2 double vs decimal.
Figura 1. Ejecución prueba no. 2 double vs decimal.
Ejecución prueba no. 3 double vs decimal.
Figura 1. Ejecución prueba no. 3 double vs decimal.

2. Conclusiones

Hemos visto muy someramente las diferencias entre los tipos de datos de punto flotante y decimal  En la prueba en código C# que se realizó se manifiesta la diferencia significativa a la hora de realizar aritmética básica de suma de números pseudoaleatorios de ambos tipos. Esta consideración debe ser tenida en cuenta cuando creemos aplicaciones centradas en datos, en particular financieras o que requieran cálculos financieros.

3. Glosario

- Aritmética de punto flotante
decimal
- Floating point
- Prueba de rendimiento

4. Referencias

[1] What is the difference between Decimal, Float and Double in C#? - http://stackoverflow.com/questions/618535/what-is-the-difference-between-decimal-float-and-double-in-c
[3] What is the difference between Decimal, Float and Double in C#? - http://stackoverflow.com/questions/618535/what-is-the-difference-between-decimal-float-and-double-in-c
[4] Generating a Random Decimal in C# - http://stackoverflow.com/questions/609501/generating-a-random-decimal-in-c-sharp
[5] C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.


H

1 comentario:

  1. The Decimal, Double, and Float variable types are different in the way that they store the values. Precision is the main difference where float is a single precision (32 bit) floating point data type, double is a double precision (64 bit) floating point data type and decimal is a 128-bit floating point data type.

    Float - 32 bit (7 digits)

    Double - 64 bit (15-16 digits)

    Decimal - 128 bit (28-29 significant digits)

    More about....Decimal vs Double vs Float

    Ling

    ResponderEliminar

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.