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)
>>
>
>
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 |