correct type overflow in im_c2ps/im_abs
This commit is contained in:
parent
8e7f9e9381
commit
3b80b682a7
@ -150,6 +150,7 @@ AC_FUNC_MMAP
|
|||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
AC_CHECK_FUNCS([getcwd gettimeofday getwd memset munmap putenv realpath strcasecmp strchr strcspn strdup strerror strrchr strspn vsnprintf realpath mkstemp mktemp random rand])
|
AC_CHECK_FUNCS([getcwd gettimeofday getwd memset munmap putenv realpath strcasecmp strchr strcspn strdup strerror strrchr strspn vsnprintf realpath mkstemp mktemp random rand])
|
||||||
AC_CHECK_LIB(m,cbrt,[AC_DEFINE(HAVE_CBRT,1,[have cbrt() in libm.])])
|
AC_CHECK_LIB(m,cbrt,[AC_DEFINE(HAVE_CBRT,1,[have cbrt() in libm.])])
|
||||||
|
AC_CHECK_LIB(m,hypot,[AC_DEFINE(HAVE_HYPOT,1,[have hypot() in libm.])])
|
||||||
|
|
||||||
# have to have these
|
# have to have these
|
||||||
PKG_CHECK_MODULES(REQUIRED, glib-2.0 >= 2.6 gmodule-2.0 >= 2.4 libxml-2.0 gobject-2.0)
|
PKG_CHECK_MODULES(REQUIRED, glib-2.0 >= 2.6 gmodule-2.0 >= 2.4 libxml-2.0 gobject-2.0)
|
||||||
|
@ -105,19 +105,43 @@
|
|||||||
|
|
||||||
/* Complex abs operation: calculate modulus.
|
/* Complex abs operation: calculate modulus.
|
||||||
*/
|
*/
|
||||||
#define complexabs(TYPE)\
|
|
||||||
{\
|
#ifdef HAVE_HYPOT
|
||||||
TYPE *p = (TYPE *) in;\
|
|
||||||
TYPE *q = (TYPE *) out;\
|
#define complexabs(TYPE) { \
|
||||||
\
|
TYPE *p = (TYPE *) in; \
|
||||||
for( x = 0; x < sz; x++ ) {\
|
TYPE *q = (TYPE *) out; \
|
||||||
double rp = p[0];\
|
TYPE *q_stop = q + sz; \
|
||||||
double ip = p[1];\
|
\
|
||||||
\
|
while( q < q_stop ) \
|
||||||
p += 2;\
|
*q++= hypot( *p++, *p++ ); \
|
||||||
q[x] = sqrt( rp * rp + ip * ip );\
|
}
|
||||||
}\
|
|
||||||
}
|
#else /*HAVE_HYPOT*/
|
||||||
|
|
||||||
|
#define complexabs(TYPE) { \
|
||||||
|
TYPE *p = (TYPE *) in; \
|
||||||
|
TYPE *q = (TYPE *) out; \
|
||||||
|
TYPE *q_stop = q + sz; \
|
||||||
|
\
|
||||||
|
while( q < q_stop ){ \
|
||||||
|
double rp = *p++; \
|
||||||
|
double ip = *p++; \
|
||||||
|
double abs_rp= fabs( rp ); \
|
||||||
|
double abs_ip= fabs( ip ); \
|
||||||
|
\
|
||||||
|
if( abs_rp > abs_ip ){ \
|
||||||
|
double temp= ip / rp; \
|
||||||
|
*q++= abs_rp * sqrt( 1.0 + temp * temp ); \
|
||||||
|
} \
|
||||||
|
else { \
|
||||||
|
double temp= rp / ip; \
|
||||||
|
*q++= abs_ip * sqrt( 1.0 + temp * temp ); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*HAVE_HYPOT*/
|
||||||
|
|
||||||
/* Abs a buffer of PELs.
|
/* Abs a buffer of PELs.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user