Los tipos binarios de coma flotante (como real y flotante) no pueden representar números decimales exactamente. En particular, no es posible almacenar exactamente 0.3 como un número de punto flotante binario. En cambio, se almacena un número muy cercano a 0.3. Esto se llama un error de representación.
El tamaño del error es diferente para real y flotante porque tienen una precisión diferente.
Si desea almacenar números decimales con mayor precisión, considere usar decimal or numeric. Pero tenga en cuenta que, aunque estos tipos pueden almacenar con precisión valores decimales hasta un cierto número de dígitos, los cálculos pueden producir números que no se pueden representar exactamente. Por ejemplo, el resultado de 0.1/0.3
no se puede almacenar exactamente en un decimal
aunque ambos 0.1
y 0.3
pueden. En este caso, el resultado se redondeará al valor más cercano que pueda almacenarse en el tipo (por ejemplo, 0.333333333
dependiendo de la precisión).
Sí, al igual que 1/3 es un número recurrente en decimal (0.333333 .. para siempre), también es recurrente en binario: 0.01010101010101 --- para siempre. Sin embargo, algunos números no recurrentes en decimales, como 0.1, son recurrentes en binario. P.ej. 0.1dec = 0.0001100110011 ... para siempre en binario, y por lo tanto no se puede representar exactamente. – DaveBoltman