¿Podrían ayudarme? Ya que tengo una situación extraña en la que cuando ingreso un número 22222.09482 en la celda, veo un número diferente 22222.0948199999 en la barra de fórmulas. A continuación se muestra la instantánea del problema.
Veo el mismo comportamiento cuando ingreso los siguientes números:
22222.09482
33333.09482
44444.09482
55555.09482
pero cuando entro 11111.09482 y 66666.09482, 77777.09482 .. hasta 99999.09482, entonces se muestran correctamente. No estoy seguro de si esto está relacionado con el redondeo. No configuré ningún perfil de redondeo. ¿Podría por favor ayudarme a resolver el problema?
microsoft-excel
microsoft-excel-2016
usuario954171
fuente
fuente
ROUND()
?=ROUND(A1,5)
, luego copie / pegue los datos como valores y elimine los números originales?ROUND()
muestra los dígitos correctos, pero el valor de copiar / pegar lo devuelve al problema original.ROUND(A1,5)
vuelva a hacer los valores pegados. Luego copie / pegue esos valores, yRound()
nuevamente, luego copie / pegue. ...: P ... eso es interesante, y parece que @EugenRieck tiene el razonamiento. ¡Buena pregunta!double
tiene la suficiente precisión que cuando redondeadas muestra los valores correctos como la mayoría de la gente esperaRespuestas:
Es un error
Excel utiliza la representación de doble precisión IEEE habitual, de acuerdo con otras respuestas. Su precisión es de 53 dígitos binarios significativos, que corresponde a aproximadamente 16 dígitos decimales.
Siempre es "seguro" mostrar los primeros 15 dígitos decimales significativos. En el sentido de que cualquier número decimal "presentado" dado con 15 dígitos se puede distinguir con seguridad de los números obtenidos cambiando la cifra decimal 15 por uno. Por ejemplo, los números de 15 dígitos:
mapear a tres números distintos de doble precisión. Ninguno de estos tres será "vecinos" en la representación de doble precisión, en este caso particular.
Entonces, confundir los dos primeros en la pantalla del usuario, es un error de Excel.
De hecho, en este dominio (entre 16384 y 32768), la precisión absoluta es 2 -38 , y los siguientes números son representables:
Para más detalles, intente escribir
22222.09482
en una celda y escribir22222.0948199999
(cinco nueves finales) en otra celda. Excel debe elegir los dos representantes de IEEE indicados por la flecha de arriba. Y creo que sí, porque puedes calcular la diferencia de estas dos celdas para obtener9.82254E-11
. Pero ambos se muestran de la misma manera.Si Excel hubiera mostrado los primeros 17 dígitos, sería útil seleccionar exactamente qué número IEEE está "debajo" del número decimal. En ese caso:
Pero mostrar 15 dígitos redondeados de forma incorrecta es engañoso y poco útil.
Antes de que alguien afirme que es intencional, ¿por qué
8.7
no muestra el mismo comportamiento? El número de doble precisión más cercano a8.7
es:por lo tanto, debe mostrarse como
8.69999999999999
si esto fuera intencional Pero no lo hace.fuente
2.1 + 2.2
regresa4.80000001
?" y obtengo muchas respuestas diciendo que eso es lo que debo esperar cuando uso el punto flotante.Excel almacena números en formato binario de coma flotante IEEE 754 de 64 bits. La clave es "almacena": el cambio de decimal a binario se produce cada vez que se almacena un número, no solo cuando se usa en un cálculo real.
Un buen artículo sobre esto está en Comprender la precisión de punto flotante, también conocido como "¿Por qué Excel me da respuestas aparentemente incorrectas?"
Es posible hacer un programa de hoja de cálculo que maneje números realmente grandes con muchos dígitos significativos. Pero no es terriblemente práctico. Excel podría haber sido diseñado para usar el formato IEEE 754 decimal128 , que permite 34 dígitos decimales, más que suficiente para almacenar 22222.09482. Pero en su lugar, utiliza el formato binario64 de doble precisión , mucho más común , que tiene 53 bits de precisión, que tiene poco menos de 16 dígitos. Si bien podría pensar que sería suficiente para un número con solo 10 dígitos, la conversión de decimal a binario complica un poco las cosas, es decir, 2222209482 puede almacenarse 100% correctamente como un número binario64, pero 22222.09482 no puede.
Tenga en cuenta que, por lo general, las hojas de cálculo se utilizan para datos financieros, que generalmente no requieren tantos dígitos de precisión, o para modelar "qué pasaría si" en una variedad de escenarios, donde no se necesita un nivel de precisión súper alto. Ciertamente, hay otras herramientas (y probablemente otros programas de hojas de cálculo, pero no he buscado últimamente) que, de forma predeterminada o mediante ajustes de configuración especiales, pueden usar un formato numérico más grande, pero Excel no es uno de ellos.
Para aquellos que señalan que LibreOffice maneja esto mejor, la apariencia puede ser engañosa. Vea esta publicación para más detalles. Parece que LibreOffice maneja números grandes de manera ligeramente diferente pero tiene la misma representación básica de coma flotante de 64 bits con problemas similares.
fuente
22222.09482
se almacena como1.0101101100111000011000010001100001111110011111000000₂ * 2₁₀^(10000001101₂ - 1023₁₀)
en IEEE 754, o en otras palabras como exactamente1.35632902954101553 * 2^14
, que es22222.0948199999984353787904
.0.2
y0.1
no pueden representarse exactamente (la fracción 1/5 (un quinto) tiene una expansión binaria recurrente infinita). Sin embargo, Excel muestra las cosas de manera confusa.Money
oBigInteger
formato, que utiliza a menudo decimal formato de almacenamiento.Al hacer sus cálculos, Excel necesita encontrar una buena representación binaria interna para los números que usa. En su caso, utiliza un número de coma flotante y, de hecho, este formato de datos tiene una aproximación (muy buena) para su número, pero no coincide exactamente. Entonces, si no le dice explícitamente a Excel qué formato de salida usar, hará un "mejor esfuerzo", resultando en una salida más cercana al valor calculado internamente, pero no es exactamente el texto que ingresa.
Solo para aclarar esto: entender que el texto que ingresó representa un número y convertir la secuencia de dígitos en un número ya cumple con la definición de "cálculo" de arriba.
EDITAR
No he dejado lo suficientemente claro, que considero que la opción de usar una representación de coma flotante de 64 bits es realmente buena: Excel no es una herramienta para científicos, donde un error de redondeo en el undécimo dígito después del punto decimal hace un gran impacto, pero los contadores no quieren que su velocidad de procesamiento se reduzca en un factor de millones para acomodar una fuente de cálculo inexacto que podría manifestarse en números que nunca usan.
Si utiliza un programa de hoja de cálculo para el que fue diseñado y utiliza un formato de salida explícito para asegurarse de que esos efectos nunca lleguen al reino visible, estará bien.
fuente
Algunos números se pueden representar correctamente y otros no.
Establezca la precisión que se muestra adecuadamente para sus cálculos y use la función round () .
Explicación:
Wikipedia - " Precisión numérica en Microsoft Excel "
Guía de cálculo numérico de Oracle: " Lo que todo informático debe saber sobre la aritmética de coma flotante "
Solución:
Journal of Accountancy - " Error por errores de cálculo de Excel ":
fuente
Como estoy seguro de que sabe, las computadoras funcionan internamente solo usando ceros y unos (también conocidos como bits) y tienen un número fijo de bits para representar un valor (generalmente 64 bits hoy en día). Eso significa que el número de valores diferentes que se pueden representar es de 2 a la 64ª potencia. Es un número enorme, claro, pero el número de valores posibles es finito, por lo que no todos los números pueden representarse. Cuando encuentra un número que no puede representar exactamente, se reemplaza automáticamente por el más cercano que puede representar. Eso es lo que estás viendo.
fuente
Las computadoras hacen sus cálculos en binario y casi siempre usan coma flotante para valores no enteros. Los únicos valores fraccionarios que pueden representarse con precisión en coma flotante deben ser una suma de alguna combinación de potencias fraccionarias de terminación 2 (1/2, 1/4, 1/8, 1/16, 1/32, ...) en el límite de precisión diseñado (generalmente 53 bits). Estos valores no siempre tienen una representación ordenada o exacta en decimal, y por el contrario, no todos los valores fraccionarios que puede representar exactamente en decimal tendrán una representación exacta en binario. Por ejemplo: 0.1. No se puede representar como una suma de potencias fraccionarias de 2 que no dura para siempre.
Cuando ingresa un valor decimal en su hoja de cálculo, se convertirá y almacenará en binario, y los casos como los que describió se convertirán en la aproximación más cercana que se puede representar en binario. Cuando se muestra, se convierte de nuevo a decimal, lo que nuevamente requiere una aproximación, que podría no volver a convertirse exactamente en la misma representación que ingresó.
¿Por qué 53 bits (más o menos)? Debido a que el estándar típico para almacenar el punto flotante de "doble precisión" utiliza 64 bits, en el que hay una mantisa (también llamada significado), un indicador de signo y un exponente. Al exponente generalmente se le asignan 10 bits, el signo toma uno, dejando 53 para la mantisa. Esto es para el almacenamiento. Los cálculos generalmente se realizan con 80 bits y se redondean de nuevo.
Hay situaciones en las que las computadoras funcionarán en la base 10, especialmente cuando se trabaja con valores monetarios donde los artefactos de redondeo no son aceptables.
fuente
Como muchos han dicho anteriormente, este es un error de representación interna. Excel ha elegido números de coma flotante de 64 bits y doble precisión. Esto le da 2 64 valores posibles. El dominio de números reales contiene una infinidad de valores, por lo que cuando intente usar uno que no pueda ser representado por Excel, usará el más cercano que pueda ser representado.
He visto comentarios que dicen que, dada la memoria infinita, se puede representar cualquier número real. Es cierto, pero no existe la "memoria infinita", por lo que este es un punto discutible. Otros han declarado que Excel podría haber utilizado una representación interna más grande, por ejemplo, 128 bits. Es cierto, pero resulta que las computadoras son mejores para realizar operaciones matemáticas en números representados con el número de bits que coincide con el tamaño del bus del procesador. Por lo tanto, una computadora de 32 bits será más rápida en operaciones matemáticas con números de 32 bits y una computadora de 64 bits será más rápida en operaciones matemáticas con números de 64 bits. Si y cuando habrá una computadora de 128 bits, podemos esperar que Excel se mueva a una representación de números de 128 bits. Eso todavía proporcionará un conjunto muy grande pero limitado de números que se pueden representar.
Si le preocupa cómo se ven los números en la hoja de cálculo, el uso de una precisión establecida (número de decimales) le dará resultados consistentes. Si le preocupa la diferencia entre el número que escribe y el número real almacenado por Excel, tiene razón en preocuparse. La diferencia es real y el error se llevará a cabo a través de los cálculos que realice. Me temo que estás atrapado con este error. Esta es una limitación de Excel, no un error como algunos han dicho. No es probable que cambie pronto, por lo que si no es aceptable para usted, le sugiero que busque otra aplicación de hoja de cálculo que pueda representar números con mayor precisión. Pero tenga en cuenta que si encuentra alguna de estas aplicaciones, la limitación sigue ahí. Es solo el tamaño del error lo que es diferente.
fuente