Si su exponente es decimal (es decir, representa 10^X), puede representar exactamente 0.1; sin embargo, la mayoría de los formatos de punto flotante utilizan exponentes binarios (es decir, representan 2^X). Dado que no hay enteros X
y Y
tales que Y * (2^X) = 0.1
, no puede representar con precisión 0,1 en la mayoría de los formatos de coma flotante.
Algunos idiomas tienen tipos con ambos exponentes. En C#, por ejemplo, hay un tipo de datos acertadamente llamado decimal
que es un formato de coma flotante con un exponente decimal por lo que admitirá almacenar un número como 0.1, aunque tiene otras propiedades poco comunes: El tipo decimal
puede distinguir entre 0.1
y 0.10
, y siempre es cierto que x + 1 != x
para todos los valores de x
.
Para los propósitos más comunes, sin embargo, C# también tiene los tipos de coma flotante float
y double
que no pueden almacenar con precisión 0.1 porque usan un exponente binario (como se define en IEEE-754). Los tipos de punto flotante binario utilizan menos almacenamiento, son más rápidos porque son más fáciles de implementar y tienen más operaciones definidas en ellos. En general, decimal
solo se usa para valores financieros donde la representación exacta de todos los valores decimales es importante y el almacenamiento, la velocidad y el rango de operaciones no lo son.
gracias, el ejemplo de C# es interesante – tsiki