From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Felipe de Jesús Molina Bravo <fjmolinabravo(at)gmail(dot)com> |
Cc: | Silvio Quadri <silvioq(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: funcion plpgsql .... corrupcion de indice |
Date: | 2008-12-12 20:59:12 |
Message-ID: | 20081212205912.GM3806@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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)
From | Date | Subject | |
---|---|---|---|
Next Message | Edwin Quijada | 2008-12-12 21:01:34 | RE: Mejoras del diseño de la DB con PostgreSQL |
Previous Message | Felipe de Jesús Molina Bravo | 2008-12-12 20:43:24 | Re: funcion plpgsql .... corrupcion de indice |