Re: funcion plpgsql .... corrupcion de indice

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)

In response to

Responses

Browse pgsql-es-ayuda by date

  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