Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-08-2006
avmm2004 avmm2004 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Santa cruz de Tenerife, Islas Canarias
Posts: 500
Poder: 21
avmm2004 Va por buen camino
A lo que yo voy es a lo siguiente:

Si se fijan hay dos formulas de cálculo en el código.
Ambas hacen exactamente lo mismo y los resultados son diferentes.

Eso es lo que mas me preocupa.
Entiendo y agradezco todos los comentarios anteriores pero no entiendo que ambas formulas den un resultado diferente (cuando hacen lo mismo).

Si ambas formulas dieran igual, puedo entender casi todo, pero no puedo entender que segun haga el calculo (bien por supuesto) me de un resultado o otro, con el mismo set de datos.

Por cierto, no utilizo Firebird utilizo Oracle 9i y la definición del campo, por casualidad es numeric (10,2).

Gracias.
Responder Con Cita
  #2  
Antiguo 21-08-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Post

El tema como dicen atinadamente todos es por el valor de punto flotante, pero porque no haces esto:

Código Delphi [-]
 
// segundo calculo
saldo := 0; for I := 0 to mes do
        saldo := saldo + (t_debe [i] - t_haber [i]); { Propiedad asociativa }
    if dm1.OraQr_mcoMCO_CUENTA.Value = 409000000 then
        showmessage(floattostr(saldo));

Bueno, todo se vale con tal de salir de nuestras dudas.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 21-08-2006
avmm2004 avmm2004 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Santa cruz de Tenerife, Islas Canarias
Posts: 500
Poder: 21
avmm2004 Va por buen camino
Ya lo hice y el resultado es identico. Falla. Gracias.
Yo he pensado que si intervendrá para algo el nuevo gestor de memoria y calculos que trae el delphi 2006, de Pierr la riche o algo asi creo que se llama.
En alguna parte leí, que se debe a el la aceleración en la ejecución del ide de delphi 2006 y en los cálculos en los programas ejecutables resultantes.
No se.

Última edición por avmm2004 fecha: 21-08-2006 a las 19:19:07.
Responder Con Cita
  #4  
Antiguo 22-08-2006
samantha jones samantha jones is offline
Miembro
 
Registrado: ago 2004
Posts: 46
Poder: 0
samantha jones Va por buen camino
a) declara saldo como currency
b) al jalar los valores de la la base de datos utiliza el AsCurrency en lugar del Value

Saludos
Responder Con Cita
  #5  
Antiguo 22-08-2006
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 24
Mick Va por buen camino
Cita:
Empezado por avmm2004
Ya lo hice y el resultado es identico. Falla. Gracias.
Yo he pensado que si intervendrá para algo el nuevo gestor de memoria y calculos que trae el delphi 2006, de Pierr la riche o algo asi creo que se llama.
En alguna parte leí, que se debe a el la aceleración en la ejecución del ide de delphi 2006 y en los cálculos en los programas ejecutables resultantes.
No se.
Los calculos no son identicos, en el primer caso se restan don valores y despues se realiza una suma.

En el segundo caso se sumas dos valores, y despues se hace una resta.

De modo que en el segundo caso algun o algunos de los valores intermedios de la primera suma no son representables de forma exacta en binario de ahi la diferencia de redondeo.

Tienes que entender que no todos los numeros decimales tienen representacion en binario de modo que en esos casos se guardar el valor binario mas aproximado.

Por ejemplo el valor decimal 69,82 no tiene representacion exacta en formato binaro de modo que si despues de asignar ese valor a una variable de tipo float mandas imprimir esa misma variable, veras que el valor es ligeramente diferente !!!

Aqui tienes un tutorial que explica con ejemplos los errores de redondeo en punto flotante, si te fijas es un tutorial de microsoft relativo a Visual Basic, no de delphi, los errores de redondeo son inherentes a la forma que tienen las computadoras de guardar los datos en punto flotante y no tienen que ver con ningun lenguaje en particular:

http://support.microsoft.com/default...b%3Bes%3B42980

PD: Con el avance continuo de la tecnologia de programacion a lenguajes de mas y mas alto nivel, me parece que se esta olvidando enseñar a la gente las bases de funcionamiento de los ordenadores, cualquier aspirante a desarrollar software deberia aprender antes que nada estas bases, no puede ser que a un programador le coja por sorpresa temas tan basicos como este.
Espero que esta reflexion no la tome nadie a mal
Responder Con Cita
  #6  
Antiguo 22-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Por otra parte, en la Universidad, más concretamente en la asignatura de Física (que nadie echa cuenta), se explica que siempre se despeje la incógnita de la ecuación y despues se realicen todas las operaciones matemáticas de una sola vez, precisamente para que la calculadora use todos los decimales de la operación (bueno... según la resolución de la calculadora).

Por tanto, no es lo mismo, hacer la operación, guardarla en una variable y despues utilizar el valor, que hacer todos los cálculos de una vez.

Por otra parte, deberías ver como está la ley de tu país acerca del redondeo, al menos en españa (no sé si es regla general) sólo se permite un redondeo en el resultado final de una operación, es decir, no se puede redondear el valor de un porcentaje de descuento, de impuestos, etc, sino unicamente el resultado final (lo que el usuario final debe pagar).

El caso de Numeric(10,2) es específico de Firebird, no puedo asegurar que sea igual en Oracle, deberás ver como guarda internamente los números decimales oracle, quizás esto te valga

Cita:
Empezado por Mick
PD: Con el avance continuo de la tecnologia de programacion a lenguajes de mas y mas alto nivel, me parece que se esta olvidando enseñar a la gente las bases de funcionamiento de los ordenadores, cualquier aspirante a desarrollar software deberia aprender antes que nada estas bases, no puede ser que a un programador le coja por sorpresa temas tan basicos como este.
Espero que esta reflexion no la tome nadie a mal
A mí me enseñaron toda la parafernalia de mantisa, exponente y los distintos formatos, ahora mismo solo recuerdo que era un lio padre. El "corolario" que subrayo, no lo dijeron explicitamente, si se supone que yo debía deducirlo... pues creo que el bosque no me dejó ver el árbol . Menos mal que tarde o temprano te das cuenta de esos "fallos".

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 22-08-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 22
kuan-yiu Va camino a la fama
Yo recuerdo perfectamente la clase en la que un profesor escribió en el encerado:
Cita:
(A*B)*C <> A*(B*C)
La cara que se nos quedó a todos... Nos lo explicó (todo el lío de la representación de los números en los diferentes formatos) e hicimos un par de programillas simplones para verlo empíricamente... y mete miedo. Ese día también nos enseñó que las calculadoras mienten Fue una clase muy instructiva y divertida.
Responder Con Cita
  #8  
Antiguo 22-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Que las calculadoras engañan nos lo demostraban en los simpsons, los grandes maestros de nuestro tiempo . En este otro hilo explicaba como David X. Cohen , uno de los creadores de los simpsoms y además con master en Computación por la Universidad de Berkeley, deslizaba en uno de los capítulos una formula que parecía contradecir el teorema de Fermat, precisamente aprovechando los errores de calculo que cometen las calculadoras.
Responder Con Cita
  #9  
Antiguo 22-08-2006
avmm2004 avmm2004 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Santa cruz de Tenerife, Islas Canarias
Posts: 500
Poder: 21
avmm2004 Va por buen camino
Cita:
Empezado por Mick
.....

......

Aqui tienes un tutorial que explica con ejemplos los errores de redondeo en punto flotante, si te fijas es un tutorial de microsoft relativo a Visual Basic, no de delphi, los errores de redondeo son inherentes a la forma que tienen las computadoras de guardar los datos en punto flotante y no tienen que ver con ningun lenguaje en particular:

http://support.microsoft.com/default...b%3Bes%3B42980

PD: Con el avance continuo de la tecnologia de programacion a lenguajes de mas y mas alto nivel, me parece que se esta olvidando enseñar a la gente las bases de funcionamiento de los ordenadores, cualquier aspirante a desarrollar software deberia aprender antes que nada estas bases, no puede ser que a un programador le coja por sorpresa temas tan basicos como este.
Espero que esta reflexion no la tome nadie a mal

Muchas gracias. El artículo me ha aclarado algunas cosas. Por cierto la traducción del artículo automática es detestable, he preferido leerlo en inglés. En cuanto al pie (PD), considero que se admiten muchas consideraciones al respecto de lo que es básico y primordial y de lo que es adicional o suplementario. (Claramente es una afirmación gratuita y no era eso lo que yo estaba buscando). Respecto al resto, gracias de nuevo.
Responder Con Cita
  #10  
Antiguo 22-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No veo porqué consideras gratuito un comentario que a todas luces se te hizo con buena intención. ¿Dudas que sea un tema básico? Pues sí lo es aun cuando tú no lo conozcas. Esto no tiene nada de malo, pero no es correcto dar la voz de alarma sin más bases que nuestra ignorancia y mucho menos echarla en cara a quien se toma el tiempo y la molestia de ayudarnos.

// Saludarnos
Responder Con Cita
  #11  
Antiguo 22-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A alguien que no estudió p... punto, pero, aficionado a esto de picar código, este Hilo le resulta interesante y fascinante a la vez. Muchas veces esa "magia" que dicen que existe en los ordenadores, compiladores, y lenguajes de programación, como toda "magia", es producto del conocimiento, por un lado, y del desconocimiento, por otro, ambos encontrados (mejor que enfrentados) por la tozuda realidad. ¿Que no?
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 22-08-2006 a las 20:08:34.
Responder Con Cita
  #12  
Antiguo 22-08-2006
avmm2004 avmm2004 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Santa cruz de Tenerife, Islas Canarias
Posts: 500
Poder: 21
avmm2004 Va por buen camino
De verdad crees que puedes ayudar a una persona, sea quien sea, diciendole en que se equivoca y luego diciendole que le faltan conocimientos de base ..... y demas. El, te ha pedido su ayuda, si quieres darsela, no un repaso de que es lo que sabe o no, ni de lo que debería saber (ese es su problema). Por eso, es un comentario gratutito que nadie te ha pedido. Nadie, ademas se dedica a dar alarmas, porque esto es un foro de gente con dudas y desconocimientos para ayudarnos y los titulos o mensajes no salen de la prepotencia del conocimiento sino de la certeza del desconocimiento.

Creo que el tema queda zanjado con esto ¿no?

Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta Delphi 6, Delphi 2005 y Delphi 2006 Leviatan Varios 6 18-08-2007 16:02:08
Delphi 2006? lookmydoom Varios 4 15-08-2006 13:54:45
Que es .net y delphi 2006 artemisa Varios 2 07-04-2006 00:59:51
Pasar de delphi 7 a Delphi 2006 (problemas con VCL) jmlifi .NET 8 24-01-2006 15:51:30
Delphi 2006 FGarcia Noticias 3 28-12-2005 18:07:44


La franja horaria es GMT +2. Ahora son las 22:23:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi