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