Re: funcion plpgsql .... corrupcion de indice

From: Felipe de Jesús Molina Bravo <fjmolinabravo(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
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-15 21:20:09
Message-ID: c31298e50812151320hcbeef2em722cd21ad8a7313f@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 12 de diciembre de 2008 16:10, Felipe de Jesús Molina Bravo <
fjmolinabravo(at)gmail(dot)com> escribió:

>
>
> El 12 de diciembre de 2008 14:59, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>escribió:
>
>> 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))
>
>
> ya lo probe y volvio a fallar .... pero hice lo que me indicastes en uno de
> tus correos, comparando los numeradores y denominadores ... y funciono!!!! .
> La forma en que se me ocurrió implantar la comparación es la siguiente
> (definitivamente la tengo que analizar un poco mas para expresarla de una
> manera correcta y mantenible):
>
> #define Comparar(x,y) ((x)->num*(y)->den - (x)->den*(y)->num)
>
> static int racional_abs_cmp_internal(Racional * a, Racional * b){
> double amag;
>
> if ( ( a->num == b->num ) && ( a->den == b->den ) )
> return 0;
>
> if ( ( a->num > b->num ) && ( a->den > b->den ) )
> return -1;
>
> if ( ( a->num < b->num ) && ( a->den < b->den ) )
> return 1;
>
> if ( a->den < b->den )
> return 1;
>
> if ( a->den > b->den )
> return -1;
>
> if ( (a->num > b->num) && (a->den == b->den) )
> return 1;
>
> if ( (a->num < b->num) && (a->den == b->den) )
> return -1;
>
> //por si me falto alguna regla.....
>
> amag = Comparar( a, b );
> if ( amag < 0 ) //a es menor que cero
> return -1;
> if ( amag > 0 ) //a es mayor que b
> return 1;
> return 0; //son iguales
> }
>
> En cuanto la termine la posteo
>
> Alvaro y a todos los que contribuyeron... muchas gracias ...
> definitivamente por gente como tu y los que participan en esta lista,
> postgres esta entre las mejores bases de datos...
>
> Seguimos....
>
>
>
Bien, pues aqui esta como quedo la función:

#define Comparar(x,y) ((double) ((double)( (x)->num * (double)(y)->den ) - \
(double)( (x)->den * (double)(y)->num)) )

static int racional_abs_cmp_internal(Racional * a, Racional * b)
{

double amag;

if ( ( a->num == b->num ) && ( a->den == b->den ) ) //1)
return 0;

if ( a->num == b->num ){
if ( a->den > b->den )
return -1;// 2)
return 1; // 3)
}
if ( a->den == b->den ){
if ( a->num > b->num )
return 1; // 4)
return -1; // 7)
}
amag = Comparar(a,b);

if ( amag < 0 ) //a es menor que cero
return -1;
if ( amag > 0 ) //a es mayor que b
return 1;
return 0; //son iguales

}

Saludos y reitero el agradecimiento

>
>
>>
>>
>> --
>> Alvaro Herrera
>> http://www.flickr.com/photos/alvherre/
>> "Las cosas son buenas o malas segun las hace nuestra opinión" (Lisias)
>>
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message juan jaimes 2008-12-16 00:01:30 Re: Beta de pgInstaller (instalador para windows) en español
Previous Message Jenaro Centeno Gómez 2008-12-15 20:20:37 Re: Problema con instalación en Windows y Hamachi