33 #  include <itpp/config.h> 
   35 #  include <itpp/config_msvc.h> 
   43 #  define finite(x) _finite(x) 
   44 #  define isfinite(x) _finite(x) 
   45 #  define isnan(x) _isnan(x) 
   46 #  define fpclass(x) _fpclass(x) 
   47 #  define FP_NINF _FPCLASS_NINF 
   48 #  define FP_PINF _FPCLASS_PINF 
   49 #  define jn(a, b) _jn(a, b) 
   50 #  define yn(a, b) _yn(a, b) 
   53 #endif // defined(_MSC_VER) 
   57 #if defined(HAVE_IEEEFP_H) 
   75 #ifndef HAVE_STD_ISINF 
   76 #if (HAVE_DECL_ISINF == 1) || defined(HAVE_ISINF) 
   77 inline int isinf(
double x) { return ::isinf(x); }
 
   78 #elif defined(FPCLASS) 
   79 inline int isinf(
double x)
 
   81   if (::fpclass(a) == FP_NINF) 
return -1;
 
   82   else if (::fpclass(a) == FP_PINF) 
return 1;
 
   86 inline int isinf(
double x)
 
   88   if ((x == x) && ((x - x) != 0.0)) 
return (x < 0.0 ? -1 : 1);
 
   91 #endif // #if (HAVE_DECL_ISINF == 1) || defined(HAVE_ISINF) 
   92 #endif // #ifndef HAVE_STD_ISINF 
   94 #ifndef HAVE_STD_ISNAN 
   95 #if (HAVE_DECL_ISNAN == 1) || defined(HAVE_ISNAN) 
   96 inline int isnan(
double x) { return ::isnan(x); }
 
   98 inline int isnan(
double x) { 
return ((x != x) ? 1 : 0); }
 
   99 #endif // #if (HAVE_DECL_ISNAN == 1) || defined(HAVE_ISNAN) 
  100 #endif // #ifndef HAVE_STD_ISNAN 
  102 #ifndef HAVE_STD_ISFINITE 
  103 #if (HAVE_DECL_ISFINITE == 1) || defined(HAVE_ISFINITE) 
  104 inline int isfinite(
double x) { return ::isfinite(x); }
 
  105 #elif defined(HAVE_FINITE) 
  106 inline int isfinite(
double x) { return ::finite(x); }
 
  108 inline int isfinite(
double x)
 
  110   return ((!std::isnan(x) && !std::isinf(x)) ? 1 : 0);
 
  112 #endif // #if (HAVE_DECL_ISFINITE == 1) || defined(HAVE_ISFINITE) 
  113 #endif // #ifndef HAVE_STD_ISFINITE 
  120 double tgamma(
double x);
 
  123 #if !defined(HAVE_LGAMMA) || (HAVE_DECL_SIGNGAM != 1) 
  125 double lgamma(
double x);
 
  132 double cbrt(
double x);
 
  138 inline double log1p(
double x) { 
return std::log(1.0 + x); }
 
  143 inline double log2(
double x)
 
  145   static const double one_over_log2 = 1.0 / 
std::log(2.0);
 
  153 double expm1(
double x);
 
  159 double erfc(
double x);
 
  164 inline double erf(
double x) { 
return (1.0 - ::
erfc(x)); }
 
  170 double asinh(
double x);
 
  175 double acosh(
double x);
 
  180 double atanh(
double x);
 
  185 double rint(
double x);
 
  190 #define GCC_VERSION (__GNUC__ * 10000           \ 
  191                      + __GNUC_MINOR__ * 100     \ 
  192                      + __GNUC_PATCHLEVEL__)