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 repetidas como 0.3 y -1.17 sin redondeo, y para hacer aritmética en ellas. Algunos ejemplos son el decimal.Decimal
tipo de Python y tipos análogos proporcionados por otros lenguajes.
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) podría representarse 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.7
podría evaluarse de manera contraria a la intuición como falsa en algunos sistemas, debido a la inexactitud de la representación de decimales.
Aunque todas las fracciones decimales son fracciones y, por lo tanto, es posible usar un tipo de datos racional para representarlo exactamente, en muchas situaciones puede ser más conveniente considerar solo fracciones decimales no repetidas (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 medidas fraccionarias en ciencias se informan como fracciones decimales, a diferencia de las fracciones con cualquier otro sistema de denominadores.
Un tipo de datos decimal podría implementarse como un número de coma flotante o como un número de coma fija . En el caso de 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 a 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 enteros, en lugar de un número de punto flotante de base 2, debido a la pérdida de exactitud que provocaría este último. Por lo general, las operaciones aritméticas básicas ('+', '-', '×', '/', potencias enteras ) y comparaciones ('=', '<', '>', '≤') se extenderían para actuar sobre ellos, ya sea de forma nativa o mediante las instalaciones de sobrecarga del operador que proporciona el idioma. El compilador puede traducir estas operaciones en una secuencia de instrucciones de máquina enteras 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 coma flotante estándar de diferente precisión:
Ayuda de idioma
- C # tiene un tipo de datos incorporado 'decimal', que consta de 128 bits, lo que da como resultado 28-29 dígitos significativos. Tiene un rango aproximado de (-7,9 x 10 ^ 28 a 7,9 x 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 NSDecimal C para representar decimales cuya mantisa tiene hasta 38 dígitos y el exponente es de -128 a 127.
- Algunos sistemas IBM y 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 (también conocido como gcc) proporciona soporte para decimales flotantes como una extensión [5]
Referencias
- ^ http://msdn.microsoft.com/en-us/library/364x0z75.aspx
- ^ https://docs.python.org/library/decimal.html
- ^ http://www.ibm.com/developerworks/data/library/techarticle/dm-0801chainani/
- ^ "Copia archivada" . Archivado desde el original el 9 de agosto de 2012 . Consultado el 28 de julio de 2012 .CS1 maint: copia archivada como título ( enlace )
- ^ "Manual de GCC" . 6.13 Tipos flotantes decimales.