Articulo de referencia

Tipo de datos decimal

Algunos lenguajes de programación (o compiladores para ellos) proporcionan un tipo de datos decimal incorporado (primitivo) o de biblioteca para representar fracciones decimales...

Algunos lenguajes de programación (o compiladores para ellos) proporcionan un tipo de datos decimal incorporado (primitivo) o de biblioteca para representar fracciones decimales no periódicas como 0,3 y −1,17 sin redondeo y para realizar operaciones aritméticas con ellas. Algunos ejemplos son el tipo decimal.Decimalor de Python y tipos análogos proporcionados por otros lenguajes. num7.Num

Razón fundamental

Los números fraccionarios se admiten en la mayoría de los lenguajes de programación como números de punto flotante o números de punto fijo . Sin embargo, estas representaciones suelen restringir el denominador a una potencia de dos. La mayoría de las fracciones decimales (o la mayoría de las fracciones en general) no se pueden representar exactamente como una fracción con un denominador que sea una potencia de dos. Por ejemplo, la fracción decimal simple 0,3 (3/10) se puede representar como 5404319552844595/18014398509481984 (0,299999999999999988897769...). Esta inexactitud causa muchos problemas que son familiares para los programadores experimentados. Por ejemplo, la expresión 0.1 * 7 == 0.7podría evaluarse como falsa de manera contraria a la intuición en algunos sistemas, debido a la inexactitud de la representación de los decimales.

Aunque todas las fracciones decimales son fracciones y, por lo tanto, es posible utilizar un tipo de datos racional para representarlas con exactitud, puede ser más conveniente en muchas situaciones considerar solo fracciones decimales no periódicas (fracciones cuyo denominador es una potencia de diez). Por ejemplo, las unidades fraccionarias de moneda en todo el mundo se basan principalmente en un denominador que es una potencia de diez. Además, la mayoría de las mediciones fraccionarias en la ciencia se informan como fracciones decimales, a diferencia de las fracciones con cualquier otro sistema de denominadores.

Un tipo de datos decimal se puede implementar como un número de punto flotante o como un número de punto fijo . En el caso del punto fijo, el denominador se establecería en una potencia fija de diez. En el caso del punto flotante, un exponente variable representaría la potencia de diez por la que se multiplica la mantisa del número.

Los lenguajes que admiten un tipo de datos racional suelen permitir la construcción de dicho valor a partir de dos números enteros, en lugar de un número de punto flotante de base 2, debido a la pérdida de exactitud que esto último causaría. Por lo general, las operaciones aritméticas básicas ('+', '−', '×', '÷', potencias enteras ) y las comparaciones ('=', '<', '>', '≤', '≥', '≠') se extenderían para actuar sobre ellas, ya sea de forma nativa o mediante funciones de sobrecarga de operadores proporcionadas por el lenguaje. El compilador puede traducir estas operaciones en una secuencia de instrucciones de máquina de números enteros o en llamadas a bibliotecas . El soporte también puede extenderse a otras operaciones, como formatear, redondear a un valor entero o de punto flotante , etc. Un ejemplo de esto es 123.456

Formatos estándar

IEEE 754 especifica tres tipos de datos decimales de punto flotante estándar de diferente precisión:

Soporte de idiomas

  • C# tiene un tipo de datos incorporado, "decimal", que consta de 128 bits, lo que da como resultado entre 28 y 29 dígitos significativos. Tiene un rango aproximado de (−7,9 × 10^28 a 7,9 × 10^28) / (10^(0 a 28)). [1]
  • A partir de Python 2.4, la biblioteca estándar de Python incluye una clase Decimal en el módulo decimal . [2]
  • La biblioteca estándar de Ruby incluye una clase BigDecimal en el módulo bigdecimal .
  • La biblioteca estándar de Java incluye una clase java.math.BigDecimal.
  • En Objective-C , las API Cocoa y GNUstep proporcionan una clase NSDecimalNumber y un tipo de datos C NSDecimal para representar decimales cuya mantisa tiene hasta 38 dígitos de longitud y el exponente va de −128 a 127.
  • Algunos sistemas IBM y sistemas SQL admiten el formato DECFLOAT con al menos los dos formatos más grandes. [3]
  • El nuevo tipo de datos DECFLOAT de ABAP incluye los formatos decimal64 (como DECFLOAT16) y decimal128 (como DECFLOAT34). [4]
  • PL/I admite de forma nativa datos decimales de punto fijo y de punto flotante.
  • GNU Compiler Collection (gcc) proporciona soporte para puntos decimales flotantes como una extensión para C y C++. [5]

Véase también

Referencias

  1. ^ "Tipos numéricos de punto flotante - Referencia de C#". 29 de septiembre de 2022.
  2. ^ "Decimal — Aritmética decimal de punto fijo y punto flotante — Documentación de Python 3.10.0".
  3. ^ "Gestión de datos". IBM .
  4. ^ "¿Cómo ayuda el nuevo tipo de datos ABAP DECFLOAT a realizar cálculos complejos? « SAP Ignite". Archivado desde el original el 2012-08-09 . Consultado el 2012-07-28 .
  5. ^ "Manual del GCC". 6.13 Tipos decimales flotantes.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Tipo_de_datos_decimal&oldid=1262284323"