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 ....

Responder a