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

Responder a