Problema raro con formula

29/09/2006 - 01:15 por Augusto | Informe spam
La cuestion es la siguiente: utilizo la fórmula "SI". En prueba lógica
completo 34,4344,83-1010,4 y esta ecuación me da FALSO !! La verdad es que
no entiendo que puede estar pasando. Realizo una auditoría de formulas y la
ventana me dice que la resta 1044,83-1010,40 es igual a 34,429999999999
!!!!!?????
No se que puedo estar haciendo mal. Estará algo mal configurado?
Agradecería mucho su ayuda.
Gracias

Si necesitan más detalle de mi problema pídanmelo.


Augusto Bothamley
augustob@gmail.com
abothamley@hotmail.com
Santiago del Estero - Argentina

Preguntas similare

Leer las respuestas

#1 David
29/09/2006 - 01:36 | Informe spam
Hola, Augusto.

Como dices, es un problema raro... diría uno entre miles?, o millones?, pero
no es causa de algo que hayas hecho mal. Es simplemente asunto de precisión.
Aparentemente, te has topado con un número que no se puede representar
exactamente en binario. Mira la respuesta (genial) de Vinchenzo al post
"numeros mayores de 15 digitos" de Jesus.

¿Solución? Lo mejor que se me ocurre, es que si intentas verificar si:

34,4344,83-1010,4

mejor considera la posibilidad de cambiar a la condición:

0 = 34,43-(1044,83-1010,4)

Otra posibilidad sería que redondearas:

34,43 = Redondear(1044,83-1010,4;4)

Esto último sería un poco más incómodo, pero mucho más certero.

Y no olvides: coméntanos cómo te fue...



"Augusto" escribió:

La cuestion es la siguiente: utilizo la fórmula "SI". En prueba lógica
completo 34,4344,83-1010,4 y esta ecuación me da FALSO !! La verdad es que
no entiendo que puede estar pasando. Realizo una auditoría de formulas y la
ventana me dice que la resta 1044,83-1010,40 es igual a 34,429999999999
!!!!!?????
No se que puedo estar haciendo mal. Estará algo mal configurado?
Agradecería mucho su ayuda.
Gracias

Si necesitan más detalle de mi problema pídanmelo.


Augusto Bothamley


Santiago del Estero - Argentina
Respuesta Responder a este mensaje
#2 Augusto
29/09/2006 - 04:54 | Informe spam
Gracias por tu respuesta David.
La lslución de redondear si la había probado y si me funcionaba, pero seguía
sin entender por que esa simple resta, además con poco decimales, no
fucionaba correctamente. De ahora en más debería usar más seguido la función
REDONDEAR para asegurarme de que no se me escapen estas cosas. A menos que
alguien tenga una mejor solución.

Saludos



Augusto Bothamley


Santiago del Estero - Argentina
Respuesta Responder a este mensaje
#3 Vinchenzo vinç
29/09/2006 - 16:10 | Informe spam
"Augusto" escribió en el mensaje news:
...
De ahora en más debería usar más seguido la función
REDONDEAR para asegurarme de que no se me escapen estas cosas. A menos que
alguien tenga una mejor solución.




Hola Augusto,
más o menos, la "solución" que se suele ver es la determinación de un margen de tolerancia arbitrario, con el que das por "aceptable" un resultado para los casos en que puede ser inexacto.

Para que te hagas una idea, una operación que cualquier humano respondería casi sin pensar sería:
'************
Dim a As Double, b As Double

a = 10.23
b = 10.03 + 0.2 'Sin pensar, diríamos (correctamente) 10.23
'Según la sentencia anterior, también deduciríamos que "a" y "b" son iguales...
'...y que por consiguiente, la sustracción "a" menos "b" será cero. Comprobémoslo:
Debug.Print "a = " & a
Debug.Print "b = " & b
Debug.Print "¿" & a & " es igual a " & b & "? => " & CBool(a = b)
Debug.Print "a-b" = a-b
'************

Estas sentencias imprimen en la 'Ventana Inmediato' (Ctrl+G) de la ventana 'Editor de Visual Basic' lo siguiente:
' a = 10,23
b = 10,23
¿10,23 es igual a 10,23? => Falso
a-b = 1,77635683940025E-15

esto equivale a:
a-b = 0.0000000000000177635683940025
'
Como ves, las limitaciones físicas de los computadores no permiten devolver el resultado exacto que hasta un crío de diez años te daría correctamente. No es cero, pero sí es un valor "relativamente" cercano a cero.
Entonces, como te decía, da un margen de precisión en las operaciones. Por poner un ejemplo, si nos fijamos en tu caso, una fórmula como la siguiente:

=SI(A1¢-A3;"Cierto";"Falso")

usando los valores que nos has indicado, devolverá "Falso".
Podrías acostumbrarte en basar las comparaciones en la sustración del valor absoluto de la operación, sobre los valores con que quieren ser comparados, esto sería:

=SI(A1-ABS(A2-A3)<=0,000001;"Cierto";"Falso")


Si quieres algo más de información sobre el tema, consulta el siguiente artículo de la Base del Conocimiento, que te ayudará a entender un poco más el porqué tenemos que hacer tantas filigranas para conseguir algo tan "aparentemente" sencillo:

· (Complete) Tutorial to Understand IEEE Floating-Point Errors
http://support.microsoft.com/kb/q42980/


Saludos
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/micr...c.es.excel
( i ) Temperancia en el foro:
http://support.microsoft.com/defaul...newsreglas
Respuesta Responder a este mensaje
#4 Augusto
29/09/2006 - 18:58 | Informe spam
Gracias Vinchenzo y David por sus respuestas.
Por lo que entendía no hay solución más que armar las fórmulas de manera de
que esta diferencia de decimales no afecte el resultado ya usando la funcion
REDONDEO o que el resultado sea < o = a cierta tolerancia.

Saludos
Respuesta Responder a este mensaje
#5 Gabriel Raigosa
30/09/2006 - 18:16 | Informe spam
Carpeta
Descripción
Dirección

1
** Microsoft Excel *
http://esnips.com/web/GabrielRaigosa

2
Archivos para usar en clase
http://esnips.com/web/RaigosaClase

3
Fechas y Horas
http://esnips.com/web/RaigosaFechasHoras

4
Formato y Formato Condicional
http://esnips.com/web/RaigosaFormatos

5
Foro Excel
http://esnips.com/web/ForoExcel

6
Funciones de Busqueda
http://esnips.com/web/RaigosaBusqueda

7
Funciones de Texto
http://esnips.com/web/RaigosaTexto

8
Funciones Financieras
http://esnips.com/web/RaigosaFinancieras

9
Funciones Logicas
http://esnips.com/web/RaigosaLogicas

10
Graficos con Excel
http://esnips.com/web/RaigosaGraficos

11
Grupo (Sabados)
Privado

12
Grupo (Viernes)
Privado

13
Grupo Excel Septiembre
Privado

14
Juegos con Excel
http://esnips.com/web/RaigosaJuegosExcel

15
Macros con Excel
http://esnips.com/web/Macros-con-Excel

16
Manuales Excel
http://esnips.com/web/RaigosaManuales

17
Paginas WEB
http://esnips.com/web/RaigosaPaginasExcel

18
Practicas - XLS
http://esnips.com/web/RaigosaPracticasXLS

19
Tablas Dinámicas
http://esnips.com/web/RaigosaTablasDinamicas

20
TEST
http://esnips.com/web/GabrielRaigosa-test

21
Validación
http://esnips.com/web/RaigosaValidacion

22
Varios
http://esnips.com/web/RaigosaVarios

23
VBA - Visual Basic para Aplicaciones
http://esnips.com/web/RaigosaVBA



Gabriel Raigosa
http://esnips.com/web/Raigosa
http://esnips.com/web/ForoExcel
"Augusto" escribió en el mensaje
news:
| La cuestion es la siguiente: utilizo la fórmula "SI". En prueba lógica
| completo 34,4344,83-1010,4 y esta ecuación me da FALSO !! La verdad es
que
| no entiendo que puede estar pasando. Realizo una auditoría de formulas y
la
| ventana me dice que la resta 1044,83-1010,40 es igual a 34,429999999999
| !!!!!?????
| No se que puedo estar haciendo mal. Estará algo mal configurado?
| Agradecería mucho su ayuda.
| Gracias
|
| Si necesitan más detalle de mi problema pídanmelo.
|
|
| Augusto Bothamley
|
|
| Santiago del Estero - Argentina
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida