Re: [INTERFACES] Problem with C functions ?
От | Karel Zak - Zakkr |
---|---|
Тема | Re: [INTERFACES] Problem with C functions ? |
Дата | |
Msg-id | Pine.LNX.3.96.991112110926.19414A-100000@ara.zf.jcu.cz обсуждение исходный текст |
Ответ на | Problem with C functions ? (Manuel Weindorf <weindorf@ipf.uni-karlsruhe.de>) |
Список | pgsql-interfaces |
On Fri, 12 Nov 1999, Manuel Weindorf wrote: > Hi there, > > I compiled a C-funtion to compute the azimuth of a LSEG but the function > never > returns the correct value, but elog( ... ) report the correct value. > So there seems to be a problem returning doubles or floats ?? > > compile the folling function with > gcc -fPIC -O2 -shared -o lseg_azimuth.o -c lseg_azimuth.c > -I/opt/local/postgres/include -L/opt/local/postgres/lib > ld -G -Bdynamic -o libgeom.so lseg_azimuth.o > > #include <math.h> > > #include "postgres.h" > #include "utils/geo_decls.h" > > double lseg_azimuth( LSEG* lseg ); > float add_one( float arg ); > > double lseg_azimuth( LSEG* lseg ) > { > double x1, y1; > double x2, y2; > double ori; > > x1 = lseg->p[0].x; > y1 = lseg->p[0].y; > > x2 = lseg->p[1].x; > y2 = lseg->p[1].y; > > ori = atan2( (x2-x1), (y2-y1)); > ori = (ori / M_PI) * 200.0; > > if ( ori < 0.0 ) > ori += 400.0; > > elog( NOTICE, "ori = %8.3lf", ori ); > > return( ori ); > } (See in PgSQL source code src/backend/utils/adt/ and geo routines). Try this: double* lseg_azimuth( LSEG* lseg ) {double *result = (double) palloc(sizeof(double)); ...... *result = any_value; ......return result; } Karel ------------------------------------------------------------------------------ Karel Zak <zakkr@zf.jcu.cz> http://home.zf.jcu.cz/~zakkr/ Docs: http://docs.linux.cz (big docs archive) Kim Project: http://home.zf.jcu.cz/~zakkr/kim/ (process manager) FTP: ftp://ftp2.zf.jcu.cz/users/zakkr/ (C/ncurses/PgSQL) ------------------------------------------------------------------------------
В списке pgsql-interfaces по дате отправления: