Commit d08d4988 by Tobias Burnus Committed by Tobias Burnus

re PR libfortran/40863 (Build failure in libgfortran)

2009-07-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/40863
        * c99_functions.c: Define complex I, if not defined.
        Create prototypes for C99 functions to silence warnings.
        * gfortran.map: Add missing functions to GFORTRAN_C99_1.0
        and new GFORTRAN_C99_1.1.

From-SVN: r150107
parent 4b89636e
2009-07-27 Tobias Burnus <burnus@net-b.de>
PR fortran/40863
* c99_functions.c: Define complex I, if not defined.
Create prototypes for C99 functions to silence warnings.
* gfortran.map: Add missing functions to GFORTRAN_C99_1.0
and new GFORTRAN_C99_1.1.
2009-07-25 Tobias Burnus <burnus@net-b.de> 2009-07-25 Tobias Burnus <burnus@net-b.de>
PR fortran/33197 PR fortran/33197
......
...@@ -1206,13 +1206,20 @@ GFORTRAN_C99_1.0 { ...@@ -1206,13 +1206,20 @@ GFORTRAN_C99_1.0 {
jnf; jnf;
lgamma; lgamma;
lgammaf; lgammaf;
llround;
llroundf;
llroundl;
log10f; log10f;
log10l; log10l;
logf; logf;
lround;
lroundf;
lroundl;
nextafterf; nextafterf;
powf; powf;
round; round;
roundf; roundf;
roundl;
scalbn; scalbn;
scalbnf; scalbnf;
sinf; sinf;
...@@ -1228,3 +1235,25 @@ GFORTRAN_C99_1.0 { ...@@ -1228,3 +1235,25 @@ GFORTRAN_C99_1.0 {
y1f; y1f;
ynf; ynf;
}; };
GFORTRAN_C99_1.1 {
global:
cacos;
cacosf;
cacosh;
cacoshf;
cacoshl;
cacosl;
casin;
casinf;
casinh;
casinhf;
casinhl;
casinl;
catan;
catanf;
catanh;
catanhf;
catanhl;
catanl;
} GFORTRAN_C99_1.0;
...@@ -54,19 +54,20 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -54,19 +54,20 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define cabsl __gfc_cabsl #define cabsl __gfc_cabsl
#endif #endif
/* Prototypes to silence -Wstrict-prototypes -Wmissing-prototypes. */ /* On a C99 system "I" (with I*I = -1) should be defined in complex.h;
if not, we define a fallback version here. */
float cabsf(float complex); #ifndef I
double cabs(double complex); # if defined(_Imaginary_I)
long double cabsl(long double complex); # define I _Imaginary_I
# elif defined(_Complex_I)
float cargf(float complex); # define I _Complex_I
double carg(double complex); # else
long double cargl(long double complex); # define I (1.0fi)
# endif
#endif
float complex clog10f(float complex); /* Prototypes are included to silence -Wstrict-prototypes
double complex clog10(double complex); -Wmissing-prototypes. */
long double complex clog10l(long double complex);
/* Wrappers for systems without the various C99 single precision Bessel /* Wrappers for systems without the various C99 single precision Bessel
...@@ -74,7 +75,7 @@ long double complex clog10l(long double complex); ...@@ -74,7 +75,7 @@ long double complex clog10l(long double complex);
#if defined(HAVE_J0) && ! defined(HAVE_J0F) #if defined(HAVE_J0) && ! defined(HAVE_J0F)
#define HAVE_J0F 1 #define HAVE_J0F 1
extern float j0f (float); float j0f (float);
float float
j0f (float x) j0f (float x)
...@@ -85,7 +86,7 @@ j0f (float x) ...@@ -85,7 +86,7 @@ j0f (float x)
#if defined(HAVE_J1) && !defined(HAVE_J1F) #if defined(HAVE_J1) && !defined(HAVE_J1F)
#define HAVE_J1F 1 #define HAVE_J1F 1
extern float j1f (float); float j1f (float);
float j1f (float x) float j1f (float x)
{ {
...@@ -95,7 +96,7 @@ float j1f (float x) ...@@ -95,7 +96,7 @@ float j1f (float x)
#if defined(HAVE_JN) && !defined(HAVE_JNF) #if defined(HAVE_JN) && !defined(HAVE_JNF)
#define HAVE_JNF 1 #define HAVE_JNF 1
extern float jnf (int, float); float jnf (int, float);
float float
jnf (int n, float x) jnf (int n, float x)
...@@ -106,7 +107,7 @@ jnf (int n, float x) ...@@ -106,7 +107,7 @@ jnf (int n, float x)
#if defined(HAVE_Y0) && !defined(HAVE_Y0F) #if defined(HAVE_Y0) && !defined(HAVE_Y0F)
#define HAVE_Y0F 1 #define HAVE_Y0F 1
extern float y0f (float); float y0f (float);
float float
y0f (float x) y0f (float x)
...@@ -117,7 +118,7 @@ y0f (float x) ...@@ -117,7 +118,7 @@ y0f (float x)
#if defined(HAVE_Y1) && !defined(HAVE_Y1F) #if defined(HAVE_Y1) && !defined(HAVE_Y1F)
#define HAVE_Y1F 1 #define HAVE_Y1F 1
extern float y1f (float); float y1f (float);
float float
y1f (float x) y1f (float x)
...@@ -128,7 +129,7 @@ y1f (float x) ...@@ -128,7 +129,7 @@ y1f (float x)
#if defined(HAVE_YN) && !defined(HAVE_YNF) #if defined(HAVE_YN) && !defined(HAVE_YNF)
#define HAVE_YNF 1 #define HAVE_YNF 1
extern float ynf (int, float); float ynf (int, float);
float float
ynf (int n, float x) ynf (int n, float x)
...@@ -142,7 +143,7 @@ ynf (int n, float x) ...@@ -142,7 +143,7 @@ ynf (int n, float x)
#if defined(HAVE_ERF) && !defined(HAVE_ERFF) #if defined(HAVE_ERF) && !defined(HAVE_ERFF)
#define HAVE_ERFF 1 #define HAVE_ERFF 1
extern float erff (float); float erff (float);
float float
erff (float x) erff (float x)
...@@ -153,7 +154,7 @@ erff (float x) ...@@ -153,7 +154,7 @@ erff (float x)
#if defined(HAVE_ERFC) && !defined(HAVE_ERFCF) #if defined(HAVE_ERFC) && !defined(HAVE_ERFCF)
#define HAVE_ERFCF 1 #define HAVE_ERFCF 1
extern float erfcf (float); float erfcf (float);
float float
erfcf (float x) erfcf (float x)
...@@ -165,14 +166,18 @@ erfcf (float x) ...@@ -165,14 +166,18 @@ erfcf (float x)
#ifndef HAVE_ACOSF #ifndef HAVE_ACOSF
#define HAVE_ACOSF 1 #define HAVE_ACOSF 1
float acosf (float x);
float float
acosf(float x) acosf (float x)
{ {
return (float) acos(x); return (float) acos (x);
} }
#endif #endif
#if HAVE_ACOSH && !HAVE_ACOSHF #if HAVE_ACOSH && !HAVE_ACOSHF
float acoshf (float x);
float float
acoshf (float x) acoshf (float x)
{ {
...@@ -182,14 +187,18 @@ acoshf (float x) ...@@ -182,14 +187,18 @@ acoshf (float x)
#ifndef HAVE_ASINF #ifndef HAVE_ASINF
#define HAVE_ASINF 1 #define HAVE_ASINF 1
float asinf (float x);
float float
asinf(float x) asinf (float x)
{ {
return (float) asin(x); return (float) asin (x);
} }
#endif #endif
#if HAVE_ASINH && !HAVE_ASINHF #if HAVE_ASINH && !HAVE_ASINHF
float asinhf (float x);
float float
asinhf (float x) asinhf (float x)
{ {
...@@ -199,23 +208,29 @@ asinhf (float x) ...@@ -199,23 +208,29 @@ asinhf (float x)
#ifndef HAVE_ATAN2F #ifndef HAVE_ATAN2F
#define HAVE_ATAN2F 1 #define HAVE_ATAN2F 1
float atan2f (float y, float x);
float float
atan2f(float y, float x) atan2f (float y, float x)
{ {
return (float) atan2(y, x); return (float) atan2 (y, x);
} }
#endif #endif
#ifndef HAVE_ATANF #ifndef HAVE_ATANF
#define HAVE_ATANF 1 #define HAVE_ATANF 1
float atanf (float x);
float float
atanf(float x) atanf (float x)
{ {
return (float) atan(x); return (float) atan (x);
} }
#endif #endif
#if HAVE_ATANH && !HAVE_ATANHF #if HAVE_ATANH && !HAVE_ATANHF
float atanhf (float x);
float float
atanhf (float x) atanhf (float x)
{ {
...@@ -225,69 +240,85 @@ atanhf (float x) ...@@ -225,69 +240,85 @@ atanhf (float x)
#ifndef HAVE_CEILF #ifndef HAVE_CEILF
#define HAVE_CEILF 1 #define HAVE_CEILF 1
float ceilf (float x);
float float
ceilf(float x) ceilf (float x)
{ {
return (float) ceil(x); return (float) ceil (x);
} }
#endif #endif
#ifndef HAVE_COPYSIGNF #ifndef HAVE_COPYSIGNF
#define HAVE_COPYSIGNF 1 #define HAVE_COPYSIGNF 1
float copysignf (float x, float y);
float float
copysignf(float x, float y) copysignf (float x, float y)
{ {
return (float) copysign(x, y); return (float) copysign (x, y);
} }
#endif #endif
#ifndef HAVE_COSF #ifndef HAVE_COSF
#define HAVE_COSF 1 #define HAVE_COSF 1
float cosf (float x);
float float
cosf(float x) cosf (float x)
{ {
return (float) cos(x); return (float) cos (x);
} }
#endif #endif
#ifndef HAVE_COSHF #ifndef HAVE_COSHF
#define HAVE_COSHF 1 #define HAVE_COSHF 1
float coshf (float x);
float float
coshf(float x) coshf (float x)
{ {
return (float) cosh(x); return (float) cosh (x);
} }
#endif #endif
#ifndef HAVE_EXPF #ifndef HAVE_EXPF
#define HAVE_EXPF 1 #define HAVE_EXPF 1
float expf (float x);
float float
expf(float x) expf (float x)
{ {
return (float) exp(x); return (float) exp (x);
} }
#endif #endif
#ifndef HAVE_FABSF #ifndef HAVE_FABSF
#define HAVE_FABSF 1 #define HAVE_FABSF 1
float fabsf (float x);
float float
fabsf(float x) fabsf (float x)
{ {
return (float) fabs(x); return (float) fabs (x);
} }
#endif #endif
#ifndef HAVE_FLOORF #ifndef HAVE_FLOORF
#define HAVE_FLOORF 1 #define HAVE_FLOORF 1
float floorf (float x);
float float
floorf(float x) floorf (float x)
{ {
return (float) floor(x); return (float) floor (x);
} }
#endif #endif
#ifndef HAVE_FMODF #ifndef HAVE_FMODF
#define HAVE_FMODF 1 #define HAVE_FMODF 1
float fmodf (float x, float y);
float float
fmodf (float x, float y) fmodf (float x, float y)
{ {
...@@ -297,111 +328,135 @@ fmodf (float x, float y) ...@@ -297,111 +328,135 @@ fmodf (float x, float y)
#ifndef HAVE_FREXPF #ifndef HAVE_FREXPF
#define HAVE_FREXPF 1 #define HAVE_FREXPF 1
float frexpf (float x, int *exp);
float float
frexpf(float x, int *exp) frexpf (float x, int *exp)
{ {
return (float) frexp(x, exp); return (float) frexp (x, exp);
} }
#endif #endif
#ifndef HAVE_HYPOTF #ifndef HAVE_HYPOTF
#define HAVE_HYPOTF 1 #define HAVE_HYPOTF 1
float hypotf (float x, float y);
float float
hypotf(float x, float y) hypotf (float x, float y)
{ {
return (float) hypot(x, y); return (float) hypot (x, y);
} }
#endif #endif
#ifndef HAVE_LOGF #ifndef HAVE_LOGF
#define HAVE_LOGF 1 #define HAVE_LOGF 1
float logf (float x);
float float
logf(float x) logf (float x)
{ {
return (float) log(x); return (float) log (x);
} }
#endif #endif
#ifndef HAVE_LOG10F #ifndef HAVE_LOG10F
#define HAVE_LOG10F 1 #define HAVE_LOG10F 1
float log10f (float x);
float float
log10f(float x) log10f (float x)
{ {
return (float) log10(x); return (float) log10 (x);
} }
#endif #endif
#ifndef HAVE_SCALBN #ifndef HAVE_SCALBN
#define HAVE_SCALBN 1 #define HAVE_SCALBN 1
double scalbn (double x, int y);
double double
scalbn(double x, int y) scalbn (double x, int y)
{ {
#if (FLT_RADIX == 2) && defined(HAVE_LDEXP) #if (FLT_RADIX == 2) && defined(HAVE_LDEXP)
return ldexp (x, y); return ldexp (x, y);
#else #else
return x * pow(FLT_RADIX, y); return x * pow (FLT_RADIX, y);
#endif #endif
} }
#endif #endif
#ifndef HAVE_SCALBNF #ifndef HAVE_SCALBNF
#define HAVE_SCALBNF 1 #define HAVE_SCALBNF 1
float scalbnf (float x, int y);
float float
scalbnf(float x, int y) scalbnf (float x, int y)
{ {
return (float) scalbn(x, y); return (float) scalbn (x, y);
} }
#endif #endif
#ifndef HAVE_SINF #ifndef HAVE_SINF
#define HAVE_SINF 1 #define HAVE_SINF 1
float sinf (float x);
float float
sinf(float x) sinf (float x)
{ {
return (float) sin(x); return (float) sin (x);
} }
#endif #endif
#ifndef HAVE_SINHF #ifndef HAVE_SINHF
#define HAVE_SINHF 1 #define HAVE_SINHF 1
float sinhf (float x);
float float
sinhf(float x) sinhf (float x)
{ {
return (float) sinh(x); return (float) sinh (x);
} }
#endif #endif
#ifndef HAVE_SQRTF #ifndef HAVE_SQRTF
#define HAVE_SQRTF 1 #define HAVE_SQRTF 1
float sqrtf (float x);
float float
sqrtf(float x) sqrtf (float x)
{ {
return (float) sqrt(x); return (float) sqrt (x);
} }
#endif #endif
#ifndef HAVE_TANF #ifndef HAVE_TANF
#define HAVE_TANF 1 #define HAVE_TANF 1
float tanf (float x);
float float
tanf(float x) tanf (float x)
{ {
return (float) tan(x); return (float) tan (x);
} }
#endif #endif
#ifndef HAVE_TANHF #ifndef HAVE_TANHF
#define HAVE_TANHF 1 #define HAVE_TANHF 1
float tanhf (float x);
float float
tanhf(float x) tanhf (float x)
{ {
return (float) tanh(x); return (float) tanh (x);
} }
#endif #endif
#ifndef HAVE_TRUNC #ifndef HAVE_TRUNC
#define HAVE_TRUNC 1 #define HAVE_TRUNC 1
double trunc (double x);
double double
trunc(double x) trunc (double x)
{ {
if (!isfinite (x)) if (!isfinite (x))
return x; return x;
...@@ -415,8 +470,10 @@ trunc(double x) ...@@ -415,8 +470,10 @@ trunc(double x)
#ifndef HAVE_TRUNCF #ifndef HAVE_TRUNCF
#define HAVE_TRUNCF 1 #define HAVE_TRUNCF 1
float truncf (float x);
float float
truncf(float x) truncf (float x)
{ {
return (float) trunc (x); return (float) trunc (x);
} }
...@@ -427,15 +484,17 @@ truncf(float x) ...@@ -427,15 +484,17 @@ truncf(float x)
/* This is a portable implementation of nextafterf that is intended to be /* This is a portable implementation of nextafterf that is intended to be
independent of the floating point format or its in memory representation. independent of the floating point format or its in memory representation.
This implementation works correctly with denormalized values. */ This implementation works correctly with denormalized values. */
float nextafterf (float x, float y);
float float
nextafterf(float x, float y) nextafterf (float x, float y)
{ {
/* This variable is marked volatile to avoid excess precision problems /* This variable is marked volatile to avoid excess precision problems
on some platforms, including IA-32. */ on some platforms, including IA-32. */
volatile float delta; volatile float delta;
float absx, denorm_min; float absx, denorm_min;
if (isnan(x) || isnan(y)) if (isnan (x) || isnan (y))
return x + y; return x + y;
if (x == y) if (x == y)
return x; return x;
...@@ -490,10 +549,12 @@ nextafterf(float x, float y) ...@@ -490,10 +549,12 @@ nextafterf(float x, float y)
#ifndef HAVE_POWF #ifndef HAVE_POWF
#define HAVE_POWF 1 #define HAVE_POWF 1
#endif #endif
float powf (float x, float y);
float float
powf(float x, float y) powf (float x, float y)
{ {
return (float) pow(x, y); return (float) pow (x, y);
} }
#endif #endif
...@@ -503,12 +564,14 @@ powf(float x, float y) ...@@ -503,12 +564,14 @@ powf(float x, float y)
#if !defined(HAVE_ROUNDL) #if !defined(HAVE_ROUNDL)
#define HAVE_ROUNDL 1 #define HAVE_ROUNDL 1
long double roundl (long double x);
#if defined(HAVE_CEILL) #if defined(HAVE_CEILL)
/* Round to nearest integral value. If the argument is halfway between two /* Round to nearest integral value. If the argument is halfway between two
integral values then round away from zero. */ integral values then round away from zero. */
long double long double
roundl(long double x) roundl (long double x)
{ {
long double t; long double t;
if (!isfinite (x)) if (!isfinite (x))
...@@ -516,14 +579,14 @@ roundl(long double x) ...@@ -516,14 +579,14 @@ roundl(long double x)
if (x >= 0.0) if (x >= 0.0)
{ {
t = ceill(x); t = ceill (x);
if (t - x > 0.5) if (t - x > 0.5)
t -= 1.0; t -= 1.0;
return (t); return (t);
} }
else else
{ {
t = ceill(-x); t = ceill (-x);
if (t + x > 0.5) if (t + x > 0.5)
t -= 1.0; t -= 1.0;
return (-t); return (-t);
...@@ -533,7 +596,7 @@ roundl(long double x) ...@@ -533,7 +596,7 @@ roundl(long double x)
/* Poor version of roundl for system that don't have ceill. */ /* Poor version of roundl for system that don't have ceill. */
long double long double
roundl(long double x) roundl (long double x)
{ {
if (x > DBL_MAX || x < -DBL_MAX) if (x > DBL_MAX || x < -DBL_MAX)
{ {
...@@ -546,7 +609,7 @@ roundl(long double x) ...@@ -546,7 +609,7 @@ roundl(long double x)
} }
else else
/* Use round(). */ /* Use round(). */
return round((double) x); return round ((double) x);
} }
#endif #endif
...@@ -556,9 +619,10 @@ roundl(long double x) ...@@ -556,9 +619,10 @@ roundl(long double x)
#define HAVE_ROUND 1 #define HAVE_ROUND 1
/* Round to nearest integral value. If the argument is halfway between two /* Round to nearest integral value. If the argument is halfway between two
integral values then round away from zero. */ integral values then round away from zero. */
double round (double x);
double double
round(double x) round (double x)
{ {
double t; double t;
if (!isfinite (x)) if (!isfinite (x))
...@@ -566,14 +630,14 @@ round(double x) ...@@ -566,14 +630,14 @@ round(double x)
if (x >= 0.0) if (x >= 0.0)
{ {
t = floor(x); t = floor (x);
if (t - x <= -0.5) if (t - x <= -0.5)
t += 1.0; t += 1.0;
return (t); return (t);
} }
else else
{ {
t = floor(-x); t = floor (-x);
if (t + x <= -0.5) if (t + x <= -0.5)
t += 1.0; t += 1.0;
return (-t); return (-t);
...@@ -585,9 +649,10 @@ round(double x) ...@@ -585,9 +649,10 @@ round(double x)
#define HAVE_ROUNDF 1 #define HAVE_ROUNDF 1
/* Round to nearest integral value. If the argument is halfway between two /* Round to nearest integral value. If the argument is halfway between two
integral values then round away from zero. */ integral values then round away from zero. */
float roundf (float x);
float float
roundf(float x) roundf (float x)
{ {
float t; float t;
if (!isfinite (x)) if (!isfinite (x))
...@@ -595,14 +660,14 @@ roundf(float x) ...@@ -595,14 +660,14 @@ roundf(float x)
if (x >= 0.0) if (x >= 0.0)
{ {
t = floorf(x); t = floorf (x);
if (t - x <= -0.5) if (t - x <= -0.5)
t += 1.0; t += 1.0;
return (t); return (t);
} }
else else
{ {
t = floorf(-x); t = floorf (-x);
if (t + x <= -0.5) if (t + x <= -0.5)
t += 1.0; t += 1.0;
return (-t); return (-t);
...@@ -615,6 +680,8 @@ roundf(float x) ...@@ -615,6 +680,8 @@ roundf(float x)
#if !defined(HAVE_LROUNDF) && defined(HAVE_ROUNDF) #if !defined(HAVE_LROUNDF) && defined(HAVE_ROUNDF)
#define HAVE_LROUNDF 1 #define HAVE_LROUNDF 1
long int lroundf (float x);
long int long int
lroundf (float x) lroundf (float x)
{ {
...@@ -624,6 +691,8 @@ lroundf (float x) ...@@ -624,6 +691,8 @@ lroundf (float x)
#if !defined(HAVE_LROUND) && defined(HAVE_ROUND) #if !defined(HAVE_LROUND) && defined(HAVE_ROUND)
#define HAVE_LROUND 1 #define HAVE_LROUND 1
long int lround (double x);
long int long int
lround (double x) lround (double x)
{ {
...@@ -633,6 +702,8 @@ lround (double x) ...@@ -633,6 +702,8 @@ lround (double x)
#if !defined(HAVE_LROUNDL) && defined(HAVE_ROUNDL) #if !defined(HAVE_LROUNDL) && defined(HAVE_ROUNDL)
#define HAVE_LROUNDL 1 #define HAVE_LROUNDL 1
long int lroundl (long double x);
long int long int
lroundl (long double x) lroundl (long double x)
{ {
...@@ -642,6 +713,8 @@ lroundl (long double x) ...@@ -642,6 +713,8 @@ lroundl (long double x)
#if !defined(HAVE_LLROUNDF) && defined(HAVE_ROUNDF) #if !defined(HAVE_LLROUNDF) && defined(HAVE_ROUNDF)
#define HAVE_LLROUNDF 1 #define HAVE_LLROUNDF 1
long long int llroundf (float x);
long long int long long int
llroundf (float x) llroundf (float x)
{ {
...@@ -651,6 +724,8 @@ llroundf (float x) ...@@ -651,6 +724,8 @@ llroundf (float x)
#if !defined(HAVE_LLROUND) && defined(HAVE_ROUND) #if !defined(HAVE_LLROUND) && defined(HAVE_ROUND)
#define HAVE_LLROUND 1 #define HAVE_LLROUND 1
long long int llround (double x);
long long int long long int
llround (double x) llround (double x)
{ {
...@@ -660,6 +735,8 @@ llround (double x) ...@@ -660,6 +735,8 @@ llround (double x)
#if !defined(HAVE_LLROUNDL) && defined(HAVE_ROUNDL) #if !defined(HAVE_LLROUNDL) && defined(HAVE_ROUNDL)
#define HAVE_LLROUNDL 1 #define HAVE_LLROUNDL 1
long long int llroundl (long double x);
long long int long long int
llroundl (long double x) llroundl (long double x)
{ {
...@@ -672,8 +749,10 @@ llroundl (long double x) ...@@ -672,8 +749,10 @@ llroundl (long double x)
#define HAVE_LOG10L 1 #define HAVE_LOG10L 1
/* log10 function for long double variables. The version provided here /* log10 function for long double variables. The version provided here
reduces the argument until it fits into a double, then use log10. */ reduces the argument until it fits into a double, then use log10. */
long double log10l (long double x);
long double long double
log10l(long double x) log10l (long double x)
{ {
#if LDBL_MAX_EXP > DBL_MAX_EXP #if LDBL_MAX_EXP > DBL_MAX_EXP
if (x > DBL_MAX) if (x > DBL_MAX)
...@@ -699,7 +778,7 @@ log10l(long double x) ...@@ -699,7 +778,7 @@ log10l(long double x)
if (x < 0x1p-4093L) { p2_result += 4093; x /= 0x1p-4093L; } if (x < 0x1p-4093L) { p2_result += 4093; x /= 0x1p-4093L; }
if (x < 0x1p-2045L) { p2_result += 2045; x /= 0x1p-2045L; } if (x < 0x1p-2045L) { p2_result += 2045; x /= 0x1p-2045L; }
if (x < 0x1p-1021L) { p2_result += 1021; x /= 0x1p-1021L; } if (x < 0x1p-1021L) { p2_result += 1021; x /= 0x1p-1021L; }
val = fabs(log10 ((double) x)); val = fabs (log10 ((double) x));
return (- val - p2_result * .30102999566398119521373889472449302L); return (- val - p2_result * .30102999566398119521373889472449302L);
} }
#endif #endif
...@@ -710,6 +789,8 @@ log10l(long double x) ...@@ -710,6 +789,8 @@ log10l(long double x)
#ifndef HAVE_FLOORL #ifndef HAVE_FLOORL
#define HAVE_FLOORL 1 #define HAVE_FLOORL 1
long double floorl (long double x);
long double long double
floorl (long double x) floorl (long double x)
{ {
...@@ -736,6 +817,8 @@ floorl (long double x) ...@@ -736,6 +817,8 @@ floorl (long double x)
#ifndef HAVE_FMODL #ifndef HAVE_FMODL
#define HAVE_FMODL 1 #define HAVE_FMODL 1
long double fmodl (long double x, long double y);
long double long double
fmodl (long double x, long double y) fmodl (long double x, long double y)
{ {
...@@ -751,6 +834,8 @@ fmodl (long double x, long double y) ...@@ -751,6 +834,8 @@ fmodl (long double x, long double y)
#if !defined(HAVE_CABSF) #if !defined(HAVE_CABSF)
#define HAVE_CABSF 1 #define HAVE_CABSF 1
float cabsf (float complex z);
float float
cabsf (float complex z) cabsf (float complex z)
{ {
...@@ -760,6 +845,8 @@ cabsf (float complex z) ...@@ -760,6 +845,8 @@ cabsf (float complex z)
#if !defined(HAVE_CABS) #if !defined(HAVE_CABS)
#define HAVE_CABS 1 #define HAVE_CABS 1
double cabs (double complex z);
double double
cabs (double complex z) cabs (double complex z)
{ {
...@@ -769,6 +856,8 @@ cabs (double complex z) ...@@ -769,6 +856,8 @@ cabs (double complex z)
#if !defined(HAVE_CABSL) && defined(HAVE_HYPOTL) #if !defined(HAVE_CABSL) && defined(HAVE_HYPOTL)
#define HAVE_CABSL 1 #define HAVE_CABSL 1
long double cabsl (long double complex z);
long double long double
cabsl (long double complex z) cabsl (long double complex z)
{ {
...@@ -779,6 +868,8 @@ cabsl (long double complex z) ...@@ -779,6 +868,8 @@ cabsl (long double complex z)
#if !defined(HAVE_CARGF) #if !defined(HAVE_CARGF)
#define HAVE_CARGF 1 #define HAVE_CARGF 1
float cargf (float complex z);
float float
cargf (float complex z) cargf (float complex z)
{ {
...@@ -788,6 +879,8 @@ cargf (float complex z) ...@@ -788,6 +879,8 @@ cargf (float complex z)
#if !defined(HAVE_CARG) #if !defined(HAVE_CARG)
#define HAVE_CARG 1 #define HAVE_CARG 1
double carg (double complex z);
double double
carg (double complex z) carg (double complex z)
{ {
...@@ -797,6 +890,8 @@ carg (double complex z) ...@@ -797,6 +890,8 @@ carg (double complex z)
#if !defined(HAVE_CARGL) && defined(HAVE_ATAN2L) #if !defined(HAVE_CARGL) && defined(HAVE_ATAN2L)
#define HAVE_CARGL 1 #define HAVE_CARGL 1
long double cargl (long double complex z);
long double long double
cargl (long double complex z) cargl (long double complex z)
{ {
...@@ -808,6 +903,8 @@ cargl (long double complex z) ...@@ -808,6 +903,8 @@ cargl (long double complex z)
/* exp(z) = exp(a)*(cos(b) + i sin(b)) */ /* exp(z) = exp(a)*(cos(b) + i sin(b)) */
#if !defined(HAVE_CEXPF) #if !defined(HAVE_CEXPF)
#define HAVE_CEXPF 1 #define HAVE_CEXPF 1
float complex cexpf (float complex z);
float complex float complex
cexpf (float complex z) cexpf (float complex z)
{ {
...@@ -823,6 +920,8 @@ cexpf (float complex z) ...@@ -823,6 +920,8 @@ cexpf (float complex z)
#if !defined(HAVE_CEXP) #if !defined(HAVE_CEXP)
#define HAVE_CEXP 1 #define HAVE_CEXP 1
double complex cexp (double complex z);
double complex double complex
cexp (double complex z) cexp (double complex z)
{ {
...@@ -838,6 +937,8 @@ cexp (double complex z) ...@@ -838,6 +937,8 @@ cexp (double complex z)
#if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(EXPL) #if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(EXPL)
#define HAVE_CEXPL 1 #define HAVE_CEXPL 1
long double complex cexpl (long double complex z);
long double complex long double complex
cexpl (long double complex z) cexpl (long double complex z)
{ {
...@@ -855,6 +956,8 @@ cexpl (long double complex z) ...@@ -855,6 +956,8 @@ cexpl (long double complex z)
/* log(z) = log (cabs(z)) + i*carg(z) */ /* log(z) = log (cabs(z)) + i*carg(z) */
#if !defined(HAVE_CLOGF) #if !defined(HAVE_CLOGF)
#define HAVE_CLOGF 1 #define HAVE_CLOGF 1
float complex clogf (float complex z);
float complex float complex
clogf (float complex z) clogf (float complex z)
{ {
...@@ -867,6 +970,8 @@ clogf (float complex z) ...@@ -867,6 +970,8 @@ clogf (float complex z)
#if !defined(HAVE_CLOG) #if !defined(HAVE_CLOG)
#define HAVE_CLOG 1 #define HAVE_CLOG 1
double complex clog (double complex z);
double complex double complex
clog (double complex z) clog (double complex z)
{ {
...@@ -879,6 +984,8 @@ clog (double complex z) ...@@ -879,6 +984,8 @@ clog (double complex z)
#if !defined(HAVE_CLOGL) && defined(HAVE_LOGL) && defined(HAVE_CABSL) && defined(HAVE_CARGL) #if !defined(HAVE_CLOGL) && defined(HAVE_LOGL) && defined(HAVE_CABSL) && defined(HAVE_CARGL)
#define HAVE_CLOGL 1 #define HAVE_CLOGL 1
long double complex clogl (long double complex z);
long double complex long double complex
clogl (long double complex z) clogl (long double complex z)
{ {
...@@ -893,6 +1000,8 @@ clogl (long double complex z) ...@@ -893,6 +1000,8 @@ clogl (long double complex z)
/* log10(z) = log10 (cabs(z)) + i*carg(z) */ /* log10(z) = log10 (cabs(z)) + i*carg(z) */
#if !defined(HAVE_CLOG10F) #if !defined(HAVE_CLOG10F)
#define HAVE_CLOG10F 1 #define HAVE_CLOG10F 1
float complex clog10f (float complex z);
float complex float complex
clog10f (float complex z) clog10f (float complex z)
{ {
...@@ -905,6 +1014,8 @@ clog10f (float complex z) ...@@ -905,6 +1014,8 @@ clog10f (float complex z)
#if !defined(HAVE_CLOG10) #if !defined(HAVE_CLOG10)
#define HAVE_CLOG10 1 #define HAVE_CLOG10 1
double complex clog10 (double complex z);
double complex double complex
clog10 (double complex z) clog10 (double complex z)
{ {
...@@ -917,6 +1028,8 @@ clog10 (double complex z) ...@@ -917,6 +1028,8 @@ clog10 (double complex z)
#if !defined(HAVE_CLOG10L) && defined(HAVE_LOG10L) && defined(HAVE_CABSL) && defined(HAVE_CARGL) #if !defined(HAVE_CLOG10L) && defined(HAVE_LOG10L) && defined(HAVE_CABSL) && defined(HAVE_CARGL)
#define HAVE_CLOG10L 1 #define HAVE_CLOG10L 1
long double complex clog10l (long double complex z);
long double complex long double complex
clog10l (long double complex z) clog10l (long double complex z)
{ {
...@@ -931,6 +1044,8 @@ clog10l (long double complex z) ...@@ -931,6 +1044,8 @@ clog10l (long double complex z)
/* pow(base, power) = cexp (power * clog (base)) */ /* pow(base, power) = cexp (power * clog (base)) */
#if !defined(HAVE_CPOWF) #if !defined(HAVE_CPOWF)
#define HAVE_CPOWF 1 #define HAVE_CPOWF 1
float complex cpowf (float complex base, float complex power);
float complex float complex
cpowf (float complex base, float complex power) cpowf (float complex base, float complex power)
{ {
...@@ -940,6 +1055,8 @@ cpowf (float complex base, float complex power) ...@@ -940,6 +1055,8 @@ cpowf (float complex base, float complex power)
#if !defined(HAVE_CPOW) #if !defined(HAVE_CPOW)
#define HAVE_CPOW 1 #define HAVE_CPOW 1
double complex cpow (double complex base, double complex power);
double complex double complex
cpow (double complex base, double complex power) cpow (double complex base, double complex power)
{ {
...@@ -949,6 +1066,8 @@ cpow (double complex base, double complex power) ...@@ -949,6 +1066,8 @@ cpow (double complex base, double complex power)
#if !defined(HAVE_CPOWL) && defined(HAVE_CEXPL) && defined(HAVE_CLOGL) #if !defined(HAVE_CPOWL) && defined(HAVE_CEXPL) && defined(HAVE_CLOGL)
#define HAVE_CPOWL 1 #define HAVE_CPOWL 1
long double complex cpowl (long double complex base, long double complex power);
long double complex long double complex
cpowl (long double complex base, long double complex power) cpowl (long double complex base, long double complex power)
{ {
...@@ -960,6 +1079,8 @@ cpowl (long double complex base, long double complex power) ...@@ -960,6 +1079,8 @@ cpowl (long double complex base, long double complex power)
/* sqrt(z). Algorithm pulled from glibc. */ /* sqrt(z). Algorithm pulled from glibc. */
#if !defined(HAVE_CSQRTF) #if !defined(HAVE_CSQRTF)
#define HAVE_CSQRTF 1 #define HAVE_CSQRTF 1
float complex csqrtf (float complex z);
float complex float complex
csqrtf (float complex z) csqrtf (float complex z)
{ {
...@@ -1013,6 +1134,8 @@ csqrtf (float complex z) ...@@ -1013,6 +1134,8 @@ csqrtf (float complex z)
#if !defined(HAVE_CSQRT) #if !defined(HAVE_CSQRT)
#define HAVE_CSQRT 1 #define HAVE_CSQRT 1
double complex csqrt (double complex z);
double complex double complex
csqrt (double complex z) csqrt (double complex z)
{ {
...@@ -1066,6 +1189,8 @@ csqrt (double complex z) ...@@ -1066,6 +1189,8 @@ csqrt (double complex z)
#if !defined(HAVE_CSQRTL) && defined(HAVE_COPYSIGNL) && defined(HAVE_SQRTL) && defined(HAVE_FABSL) && defined(HAVE_HYPOTL) #if !defined(HAVE_CSQRTL) && defined(HAVE_COPYSIGNL) && defined(HAVE_SQRTL) && defined(HAVE_FABSL) && defined(HAVE_HYPOTL)
#define HAVE_CSQRTL 1 #define HAVE_CSQRTL 1
long double complex csqrtl (long double complex z);
long double complex long double complex
csqrtl (long double complex z) csqrtl (long double complex z)
{ {
...@@ -1121,6 +1246,8 @@ csqrtl (long double complex z) ...@@ -1121,6 +1246,8 @@ csqrtl (long double complex z)
/* sinh(a + i b) = sinh(a) cos(b) + i cosh(a) sin(b) */ /* sinh(a + i b) = sinh(a) cos(b) + i cosh(a) sin(b) */
#if !defined(HAVE_CSINHF) #if !defined(HAVE_CSINHF)
#define HAVE_CSINHF 1 #define HAVE_CSINHF 1
float complex csinhf (float complex a);
float complex float complex
csinhf (float complex a) csinhf (float complex a)
{ {
...@@ -1136,6 +1263,8 @@ csinhf (float complex a) ...@@ -1136,6 +1263,8 @@ csinhf (float complex a)
#if !defined(HAVE_CSINH) #if !defined(HAVE_CSINH)
#define HAVE_CSINH 1 #define HAVE_CSINH 1
double complex csinh (double complex a);
double complex double complex
csinh (double complex a) csinh (double complex a)
{ {
...@@ -1151,6 +1280,8 @@ csinh (double complex a) ...@@ -1151,6 +1280,8 @@ csinh (double complex a)
#if !defined(HAVE_CSINHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) #if !defined(HAVE_CSINHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
#define HAVE_CSINHL 1 #define HAVE_CSINHL 1
long double complex csinhl (long double complex a);
long double complex long double complex
csinhl (long double complex a) csinhl (long double complex a)
{ {
...@@ -1168,6 +1299,8 @@ csinhl (long double complex a) ...@@ -1168,6 +1299,8 @@ csinhl (long double complex a)
/* cosh(a + i b) = cosh(a) cos(b) + i sinh(a) sin(b) */ /* cosh(a + i b) = cosh(a) cos(b) + i sinh(a) sin(b) */
#if !defined(HAVE_CCOSHF) #if !defined(HAVE_CCOSHF)
#define HAVE_CCOSHF 1 #define HAVE_CCOSHF 1
float complex ccoshf (float complex a);
float complex float complex
ccoshf (float complex a) ccoshf (float complex a)
{ {
...@@ -1183,6 +1316,8 @@ ccoshf (float complex a) ...@@ -1183,6 +1316,8 @@ ccoshf (float complex a)
#if !defined(HAVE_CCOSH) #if !defined(HAVE_CCOSH)
#define HAVE_CCOSH 1 #define HAVE_CCOSH 1
double complex ccosh (double complex a);
double complex double complex
ccosh (double complex a) ccosh (double complex a)
{ {
...@@ -1198,6 +1333,8 @@ ccosh (double complex a) ...@@ -1198,6 +1333,8 @@ ccosh (double complex a)
#if !defined(HAVE_CCOSHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) #if !defined(HAVE_CCOSHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
#define HAVE_CCOSHL 1 #define HAVE_CCOSHL 1
long double complex ccoshl (long double complex a);
long double complex long double complex
ccoshl (long double complex a) ccoshl (long double complex a)
{ {
...@@ -1215,6 +1352,8 @@ ccoshl (long double complex a) ...@@ -1215,6 +1352,8 @@ ccoshl (long double complex a)
/* tanh(a + i b) = (tanh(a) + i tan(b)) / (1 + i tanh(a) tan(b)) */ /* tanh(a + i b) = (tanh(a) + i tan(b)) / (1 + i tanh(a) tan(b)) */
#if !defined(HAVE_CTANHF) #if !defined(HAVE_CTANHF)
#define HAVE_CTANHF 1 #define HAVE_CTANHF 1
float complex ctanhf (float complex a);
float complex float complex
ctanhf (float complex a) ctanhf (float complex a)
{ {
...@@ -1232,6 +1371,7 @@ ctanhf (float complex a) ...@@ -1232,6 +1371,7 @@ ctanhf (float complex a)
#if !defined(HAVE_CTANH) #if !defined(HAVE_CTANH)
#define HAVE_CTANH 1 #define HAVE_CTANH 1
double complex ctanh (double complex a);
double complex double complex
ctanh (double complex a) ctanh (double complex a)
{ {
...@@ -1249,6 +1389,8 @@ ctanh (double complex a) ...@@ -1249,6 +1389,8 @@ ctanh (double complex a)
#if !defined(HAVE_CTANHL) && defined(HAVE_TANL) && defined(HAVE_TANHL) #if !defined(HAVE_CTANHL) && defined(HAVE_TANL) && defined(HAVE_TANHL)
#define HAVE_CTANHL 1 #define HAVE_CTANHL 1
long double complex ctanhl (long double complex a);
long double complex long double complex
ctanhl (long double complex a) ctanhl (long double complex a)
{ {
...@@ -1268,6 +1410,8 @@ ctanhl (long double complex a) ...@@ -1268,6 +1410,8 @@ ctanhl (long double complex a)
/* sin(a + i b) = sin(a) cosh(b) + i cos(a) sinh(b) */ /* sin(a + i b) = sin(a) cosh(b) + i cos(a) sinh(b) */
#if !defined(HAVE_CSINF) #if !defined(HAVE_CSINF)
#define HAVE_CSINF 1 #define HAVE_CSINF 1
float complex csinf (float complex a);
float complex float complex
csinf (float complex a) csinf (float complex a)
{ {
...@@ -1283,6 +1427,8 @@ csinf (float complex a) ...@@ -1283,6 +1427,8 @@ csinf (float complex a)
#if !defined(HAVE_CSIN) #if !defined(HAVE_CSIN)
#define HAVE_CSIN 1 #define HAVE_CSIN 1
double complex csin (double complex a);
double complex double complex
csin (double complex a) csin (double complex a)
{ {
...@@ -1298,6 +1444,8 @@ csin (double complex a) ...@@ -1298,6 +1444,8 @@ csin (double complex a)
#if !defined(HAVE_CSINL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) #if !defined(HAVE_CSINL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
#define HAVE_CSINL 1 #define HAVE_CSINL 1
long double complex csinl (long double complex a);
long double complex long double complex
csinl (long double complex a) csinl (long double complex a)
{ {
...@@ -1315,6 +1463,8 @@ csinl (long double complex a) ...@@ -1315,6 +1463,8 @@ csinl (long double complex a)
/* cos(a + i b) = cos(a) cosh(b) - i sin(a) sinh(b) */ /* cos(a + i b) = cos(a) cosh(b) - i sin(a) sinh(b) */
#if !defined(HAVE_CCOSF) #if !defined(HAVE_CCOSF)
#define HAVE_CCOSF 1 #define HAVE_CCOSF 1
float complex ccosf (float complex a);
float complex float complex
ccosf (float complex a) ccosf (float complex a)
{ {
...@@ -1330,6 +1480,8 @@ ccosf (float complex a) ...@@ -1330,6 +1480,8 @@ ccosf (float complex a)
#if !defined(HAVE_CCOS) #if !defined(HAVE_CCOS)
#define HAVE_CCOS 1 #define HAVE_CCOS 1
double complex ccos (double complex a);
double complex double complex
ccos (double complex a) ccos (double complex a)
{ {
...@@ -1345,6 +1497,8 @@ ccos (double complex a) ...@@ -1345,6 +1497,8 @@ ccos (double complex a)
#if !defined(HAVE_CCOSL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) #if !defined(HAVE_CCOSL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
#define HAVE_CCOSL 1 #define HAVE_CCOSL 1
long double complex ccosl (long double complex a);
long double complex long double complex
ccosl (long double complex a) ccosl (long double complex a)
{ {
...@@ -1362,6 +1516,8 @@ ccosl (long double complex a) ...@@ -1362,6 +1516,8 @@ ccosl (long double complex a)
/* tan(a + i b) = (tan(a) + i tanh(b)) / (1 - i tan(a) tanh(b)) */ /* tan(a + i b) = (tan(a) + i tanh(b)) / (1 - i tan(a) tanh(b)) */
#if !defined(HAVE_CTANF) #if !defined(HAVE_CTANF)
#define HAVE_CTANF 1 #define HAVE_CTANF 1
float complex ctanf (float complex a);
float complex float complex
ctanf (float complex a) ctanf (float complex a)
{ {
...@@ -1379,6 +1535,8 @@ ctanf (float complex a) ...@@ -1379,6 +1535,8 @@ ctanf (float complex a)
#if !defined(HAVE_CTAN) #if !defined(HAVE_CTAN)
#define HAVE_CTAN 1 #define HAVE_CTAN 1
double complex ctan (double complex a);
double complex double complex
ctan (double complex a) ctan (double complex a)
{ {
...@@ -1396,6 +1554,8 @@ ctan (double complex a) ...@@ -1396,6 +1554,8 @@ ctan (double complex a)
#if !defined(HAVE_CTANL) && defined(HAVE_TANL) && defined(HAVE_TANHL) #if !defined(HAVE_CTANL) && defined(HAVE_TANL) && defined(HAVE_TANHL)
#define HAVE_CTANL 1 #define HAVE_CTANL 1
long double complex ctanl (long double complex a);
long double complex long double complex
ctanl (long double complex a) ctanl (long double complex a)
{ {
...@@ -1417,6 +1577,8 @@ ctanl (long double complex a) ...@@ -1417,6 +1577,8 @@ ctanl (long double complex a)
#if !defined(HAVE_CASINF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF) #if !defined(HAVE_CASINF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
#define HAVE_CASINF 1 #define HAVE_CASINF 1
complex float casinf (complex float z);
complex float complex float
casinf (complex float z) casinf (complex float z)
{ {
...@@ -1427,6 +1589,8 @@ casinf (complex float z) ...@@ -1427,6 +1589,8 @@ casinf (complex float z)
#if !defined(HAVE_CASIN) && defined(HAVE_CLOG) && defined(HAVE_CSQRT) #if !defined(HAVE_CASIN) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
#define HAVE_CASIN 1 #define HAVE_CASIN 1
complex double casin (complex double z);
complex double complex double
casin (complex double z) casin (complex double z)
{ {
...@@ -1437,6 +1601,8 @@ casin (complex double z) ...@@ -1437,6 +1601,8 @@ casin (complex double z)
#if !defined(HAVE_CASINL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL) #if !defined(HAVE_CASINL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
#define HAVE_CASINL 1 #define HAVE_CASINL 1
complex long double casinl (complex long double z);
complex long double complex long double
casinl (complex long double z) casinl (complex long double z)
{ {
...@@ -1450,17 +1616,21 @@ casinl (complex long double z) ...@@ -1450,17 +1616,21 @@ casinl (complex long double z)
#if !defined(HAVE_CACOSF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF) #if !defined(HAVE_CACOSF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
#define HAVE_CACOSF 1 #define HAVE_CACOSF 1
complex float cacosf (complex float z);
complex float complex float
cacosf (complex float z) cacosf (complex float z)
{ {
return -I*clogf (z + I*csqrtf(1.0f-z*z)); return -I*clogf (z + I*csqrtf (1.0f-z*z));
} }
#endif #endif
complex double
#if !defined(HAVE_CACOS) && defined(HAVE_CLOG) && defined(HAVE_CSQRT) #if !defined(HAVE_CACOS) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
#define HAVE_CACOS 1 #define HAVE_CACOS 1
complex double cacos (complex double z);
complex double
cacos (complex double z) cacos (complex double z)
{ {
return -I*clog (z + I*csqrt (1.0-z*z)); return -I*clog (z + I*csqrt (1.0-z*z));
...@@ -1470,6 +1640,8 @@ cacos (complex double z) ...@@ -1470,6 +1640,8 @@ cacos (complex double z)
#if !defined(HAVE_CACOSL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL) #if !defined(HAVE_CACOSL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
#define HAVE_CACOSL 1 #define HAVE_CACOSL 1
complex long double cacosl (complex long double z);
complex long double complex long double
cacosl (complex long double z) cacosl (complex long double z)
{ {
...@@ -1483,6 +1655,8 @@ cacosl (complex long double z) ...@@ -1483,6 +1655,8 @@ cacosl (complex long double z)
#if !defined(HAVE_CATANF) && defined(HAVE_CLOGF) #if !defined(HAVE_CATANF) && defined(HAVE_CLOGF)
#define HAVE_CACOSF 1 #define HAVE_CACOSF 1
complex float catanf (complex float z);
complex float complex float
catanf (complex float z) catanf (complex float z)
{ {
...@@ -1493,6 +1667,8 @@ catanf (complex float z) ...@@ -1493,6 +1667,8 @@ catanf (complex float z)
#if !defined(HAVE_CATAN) && defined(HAVE_CLOG) #if !defined(HAVE_CATAN) && defined(HAVE_CLOG)
#define HAVE_CACOS 1 #define HAVE_CACOS 1
complex double catan (complex double z);
complex double complex double
catan (complex double z) catan (complex double z)
{ {
...@@ -1503,6 +1679,8 @@ catan (complex double z) ...@@ -1503,6 +1679,8 @@ catan (complex double z)
#if !defined(HAVE_CATANL) && defined(HAVE_CLOGL) #if !defined(HAVE_CATANL) && defined(HAVE_CLOGL)
#define HAVE_CACOSL 1 #define HAVE_CACOSL 1
complex long double catanl (complex long double z);
complex long double complex long double
catanl (complex long double z) catanl (complex long double z)
{ {
...@@ -1516,6 +1694,8 @@ catanl (complex long double z) ...@@ -1516,6 +1694,8 @@ catanl (complex long double z)
#if !defined(HAVE_CASINHF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF) #if !defined(HAVE_CASINHF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
#define HAVE_CASINHF 1 #define HAVE_CASINHF 1
complex float casinhf (complex float z);
complex float complex float
casinhf (complex float z) casinhf (complex float z)
{ {
...@@ -1526,6 +1706,8 @@ casinhf (complex float z) ...@@ -1526,6 +1706,8 @@ casinhf (complex float z)
#if !defined(HAVE_CASINH) && defined(HAVE_CLOG) && defined(HAVE_CSQRT) #if !defined(HAVE_CASINH) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
#define HAVE_CASINH 1 #define HAVE_CASINH 1
complex double casinh (complex double z);
complex double complex double
casinh (complex double z) casinh (complex double z)
{ {
...@@ -1536,6 +1718,8 @@ casinh (complex double z) ...@@ -1536,6 +1718,8 @@ casinh (complex double z)
#if !defined(HAVE_CASINHL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL) #if !defined(HAVE_CASINHL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
#define HAVE_CASINHL 1 #define HAVE_CASINHL 1
complex long double casinhl (complex long double z);
complex long double complex long double
casinhl (complex long double z) casinhl (complex long double z)
{ {
...@@ -1549,6 +1733,8 @@ casinhl (complex long double z) ...@@ -1549,6 +1733,8 @@ casinhl (complex long double z)
#if !defined(HAVE_CACOSHF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF) #if !defined(HAVE_CACOSHF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
#define HAVE_CACOSHF 1 #define HAVE_CACOSHF 1
complex float cacoshf (complex float z);
complex float complex float
cacoshf (complex float z) cacoshf (complex float z)
{ {
...@@ -1559,6 +1745,8 @@ cacoshf (complex float z) ...@@ -1559,6 +1745,8 @@ cacoshf (complex float z)
#if !defined(HAVE_CACOSH) && defined(HAVE_CLOG) && defined(HAVE_CSQRT) #if !defined(HAVE_CACOSH) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
#define HAVE_CACOSH 1 #define HAVE_CACOSH 1
complex double cacosh (complex double z);
complex double complex double
cacosh (complex double z) cacosh (complex double z)
{ {
...@@ -1569,6 +1757,8 @@ cacosh (complex double z) ...@@ -1569,6 +1757,8 @@ cacosh (complex double z)
#if !defined(HAVE_CACOSHL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL) #if !defined(HAVE_CACOSHL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
#define HAVE_CACOSHL 1 #define HAVE_CACOSHL 1
complex long double cacoshl (complex long double z);
complex long double complex long double
cacoshl (complex long double z) cacoshl (complex long double z)
{ {
...@@ -1582,6 +1772,8 @@ cacoshl (complex long double z) ...@@ -1582,6 +1772,8 @@ cacoshl (complex long double z)
#if !defined(HAVE_CATANHF) && defined(HAVE_CLOGF) #if !defined(HAVE_CATANHF) && defined(HAVE_CLOGF)
#define HAVE_CATANHF 1 #define HAVE_CATANHF 1
complex float catanhf (complex float z);
complex float complex float
catanhf (complex float z) catanhf (complex float z)
{ {
...@@ -1592,6 +1784,8 @@ catanhf (complex float z) ...@@ -1592,6 +1784,8 @@ catanhf (complex float z)
#if !defined(HAVE_CATANH) && defined(HAVE_CLOG) #if !defined(HAVE_CATANH) && defined(HAVE_CLOG)
#define HAVE_CATANH 1 #define HAVE_CATANH 1
complex double catanh (complex double z);
complex double complex double
catanh (complex double z) catanh (complex double z)
{ {
...@@ -1601,6 +1795,8 @@ catanh (complex double z) ...@@ -1601,6 +1795,8 @@ catanh (complex double z)
#if !defined(HAVE_CATANHL) && defined(HAVE_CLOGL) #if !defined(HAVE_CATANHL) && defined(HAVE_CLOGL)
#define HAVE_CATANHL 1 #define HAVE_CATANHL 1
complex long double catanhl (complex long double z);
complex long double complex long double
catanhl (complex long double z) catanhl (complex long double z)
{ {
...@@ -1611,8 +1807,7 @@ catanhl (complex long double z) ...@@ -1611,8 +1807,7 @@ catanhl (complex long double z)
#if !defined(HAVE_TGAMMA) #if !defined(HAVE_TGAMMA)
#define HAVE_TGAMMA 1 #define HAVE_TGAMMA 1
double tgamma (double);
extern double tgamma (double);
/* Fallback tgamma() function. Uses the algorithm from /* Fallback tgamma() function. Uses the algorithm from
http://www.netlib.org/specfun/gamma and references therein. */ http://www.netlib.org/specfun/gamma and references therein. */
...@@ -1652,7 +1847,7 @@ tgamma (double x) ...@@ -1652,7 +1847,7 @@ tgamma (double x)
static double eps = 0; static double eps = 0;
if (eps == 0) if (eps == 0)
eps = nextafter(1., 2.) - 1.; eps = nextafter (1., 2.) - 1.;
parity = 0; parity = 0;
fact = 1; fact = 1;
...@@ -1665,14 +1860,14 @@ tgamma (double x) ...@@ -1665,14 +1860,14 @@ tgamma (double x)
if (y <= 0) if (y <= 0)
{ {
y = -x; y = -x;
y1 = trunc(y); y1 = trunc (y);
res = y - y1; res = y - y1;
if (res != 0) if (res != 0)
{ {
if (y1 != trunc(y1*0.5l)*2) if (y1 != trunc (y1*0.5l)*2)
parity = 1; parity = 1;
fact = -PI / sin(PI*res); fact = -PI / sin (PI*res);
y = y + 1; y = y + 1;
} }
else else
...@@ -1730,8 +1925,8 @@ tgamma (double x) ...@@ -1730,8 +1925,8 @@ tgamma (double x)
sum = sum / ysq + c[i]; sum = sum / ysq + c[i];
sum = sum/y - y + SQRTPI; sum = sum/y - y + SQRTPI;
sum = sum + (y - 0.5) * log(y); sum = sum + (y - 0.5) * log (y);
res = exp(sum); res = exp (sum);
} }
else else
return x < 0 ? xnan : xinf; return x < 0 ? xnan : xinf;
...@@ -1750,8 +1945,7 @@ tgamma (double x) ...@@ -1750,8 +1945,7 @@ tgamma (double x)
#if !defined(HAVE_LGAMMA) #if !defined(HAVE_LGAMMA)
#define HAVE_LGAMMA 1 #define HAVE_LGAMMA 1
double lgamma (double);
extern double lgamma (double);
/* Fallback lgamma() function. Uses the algorithm from /* Fallback lgamma() function. Uses the algorithm from
http://www.netlib.org/specfun/algama and references therein, http://www.netlib.org/specfun/algama and references therein,
...@@ -1818,17 +2012,17 @@ lgamma (double y) ...@@ -1818,17 +2012,17 @@ lgamma (double y)
double corr, res, xden, xm1, xm2, xm4, xnum, ysq; double corr, res, xden, xm1, xm2, xm4, xnum, ysq;
if (eps == 0) if (eps == 0)
eps = __builtin_nextafter(1., 2.) - 1.; eps = __builtin_nextafter (1., 2.) - 1.;
if ((y > 0) && (y <= xbig)) if ((y > 0) && (y <= xbig))
{ {
if (y <= eps) if (y <= eps)
res = -log(y); res = -log (y);
else if (y <= 1.5) else if (y <= 1.5)
{ {
if (y < PNT68) if (y < PNT68)
{ {
corr = -log(y); corr = -log (y);
xm1 = y; xm1 = y;
} }
else else
...@@ -1896,7 +2090,7 @@ lgamma (double y) ...@@ -1896,7 +2090,7 @@ lgamma (double y)
res = res / ysq + c[i]; res = res / ysq + c[i];
} }
res = res/y; res = res/y;
corr = log(y); corr = log (y);
res = res + SQRTPI - 0.5*corr; res = res + SQRTPI - 0.5*corr;
res = res + y*(corr-1); res = res + y*(corr-1);
} }
...@@ -1921,7 +2115,7 @@ lgamma (double y) ...@@ -1921,7 +2115,7 @@ lgamma (double y)
#if defined(HAVE_TGAMMA) && !defined(HAVE_TGAMMAF) #if defined(HAVE_TGAMMA) && !defined(HAVE_TGAMMAF)
#define HAVE_TGAMMAF 1 #define HAVE_TGAMMAF 1
extern float tgammaf (float); float tgammaf (float);
float float
tgammaf (float x) tgammaf (float x)
...@@ -1932,7 +2126,7 @@ tgammaf (float x) ...@@ -1932,7 +2126,7 @@ tgammaf (float x)
#if defined(HAVE_LGAMMA) && !defined(HAVE_LGAMMAF) #if defined(HAVE_LGAMMA) && !defined(HAVE_LGAMMAF)
#define HAVE_LGAMMAF 1 #define HAVE_LGAMMAF 1
extern float lgammaf (float); float lgammaf (float);
float float
lgammaf (float x) lgammaf (float x)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment