El 12 de diciembre de 2008 13:31, Felipe de Jesús Molina Bravo < fjmolinabr...@gmail.com> escribió:
> > > El 12 de diciembre de 2008 12:50, Silvio Quadri <silv...@gmail.com>escribió: > >> El día 12 de diciembre de 2008 16:47, Alvaro Herrera >> <alvhe...@alvh.no-ip.org> escribió: >> > Felipe de Jesús Molina Bravo escribió: >> > >> >> entonces mi problema es el indice.... esta corrupto ... pero estoy ante >> una >> >> limitante de postgres o ante un error de programacion? >> > >> > No es una limitante, creo yo; más parece un bug. Estuve mirando tu >> > código y la verdad es que me quedé algo clavado mirando la función >> > recursiva que obtiene el MCD. ¿Estás seguro que funciona correctamente? >> >> > >> > >> > Lo otro es que no me queda totalmente claro si las funciones de >> > comparación para el btree están correctas. Parecen estarlo pero algún >> > detalle puede estarse escapando ... por ej. no tengo totalmente claro si >> > la función cmp() debería devolver un valor distinto de 0 cuando se pasan >> > dos racionales que son iguales en valor absoluto pero se escriben de >> > maneras distintas (1/2 versus 2/4 por ej.) Quizás tu problema vaya por >> > ese lado. >> >> Podrías ver si funciona quitándo el calculador de MCD. >> Si bien un medio te daría distinto a dos cuartos, podrías ver si el >> inconveniente se genera al reducir las fracciones. >> Silvio > > > Muchas gracias por las ideas ... ya probe quitando el MCD y continua el > problema ... voy a revisar a detalle las funciones de comparación ... antes > de comparar se me ocurre reducir a su minima expresion cada racional .... > gracias ....yo les comento...(escribiendo se me ocurrio esto ultimo) > ya probe lo que acorde y sigue igual ... en cuanta a las dudas de la macro de cmp, segun yo esta correcta ... #define Comparar(x,y) ((x)->num*(y)->den - (x)->den*(y)->num) si x= 3/4 y= 6/8 entonces Comparar(x,y)= (3*8) - (4*6) = 0 si x= 3/4 y= 6/8 entonces segun yo es un comportamiento general.... pero ahora que pasa cuando x=(57133/ 73908) y= (363669/470447) Comparar = (57133*470447) - (73908*363669) = 26878048451 - 26878048452= -1 mi duda es .... alguna multiplicacion de este tipo podria causar algun desbordamiento en el tipo de datos ... no creen? ....lo dudo pero que piensan ....