Felipe de Jesús Molina Bravo escribió: > 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
Sigo pensando que esto no es necesariamente correcto, porque el btree necesita ser aún mas estricto. Sin embargo > 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 .... Obviamente esto podría estar causando el problema. Quizás deberías hacer las multiplicaciones en uint64, supongo que debería ser algo así #define Comparar(x,y) ((uint32) ((uint64)(x)->num* (uint64)(y)->den - \ (uint64)(x)->den* (uint64)(y)->num)) -- Alvaro Herrera http://www.flickr.com/photos/alvherre/ "Las cosas son buenas o malas segun las hace nuestra opinión" (Lisias) -- TIP 5: ¿Has leído nuestro extenso FAQ? http://www.postgresql.org/docs/faqs.FAQ.html