www.pudn.com > system.rar > cmathl


/****************************************************************************/ 
/*  cmathl  v2.54                                                           */ 
/*  Copyright (c) 1999-2004  Texas Instruments Incorporated                 */ 
/****************************************************************************/ 
 
/* This source automatically generated on Fri Feb 12 13:24:25 EST 1999 */ 
 
#ifndef __cmathl__ 
#define __cmathl__ 
 
#ifndef EDOM 
   #define EDOM   1 
#endif 
 
#ifndef ERANGE 
   #define ERANGE 2 
#endif 
 
#include  
 
#if (LDBL_DIG == DBL_DIG) /* long double is not different than double */ 
 
#include  
 
#define sqrtl    sqrt 
#define expl     exp 
#define logl     log 
#define log10l   log10 
#define powl     pow 
#define sinl     sin 
#define cosl     cos 
#define tanl     tan 
#define asinl    asin 
#define acosl    acos 
#define atanl    atan 
#define atan2l   atan2 
#define sinhl    sinh 
#define coshl    cosh 
#define tanhl    tanh 
 
#define ceill    ceil 
#define floorl   floor 
 
#define fabsl    fabs 
 
#define ldexpl   ldexp 
#define frexpl   frexp 
#define modfl    modf 
#define fmodl    fmod 
 
#ifdef _TI_ENHANCED_MATH_H 
 
#define HUGE_VALL LDBL_MAX 
 
#define rsqrtl   rsqrt 
#define exp2l    exp2 
#define exp10l   exp10 
#define log2l    log2 
#define powil    powi 
#define cotl     cot 
#define acotl    acot 
#define acot2l   acot2 
#define cothl    coth 
#define asinhl   asinh 
#define acoshl   acosh 
#define atanhl   atanh 
#define acothl   acoth 
#define truncl   _trunc 
#define roundl   _nround 
 
#endif 
 
#else /* long double is different than double */ 
 
#include  
 
extern "C" namespace std 
{ 
__EXTERN long double sqrtl (long double x); 
__EXTERN long double expl  (long double x); 
__EXTERN long double logl  (long double x); 
__EXTERN long double log10l(long double x); 
__EXTERN long double powl  (long double x, long double y); 
__EXTERN long double sinl  (long double x); 
__EXTERN long double cosl  (long double x); 
__EXTERN long double tanl  (long double x); 
__EXTERN long double asinl (long double x); 
__EXTERN long double acosl (long double x); 
__EXTERN long double atanl (long double x); 
__EXTERN long double atan2l(long double y, long double x); 
__EXTERN long double sinhl (long double x); 
__EXTERN long double coshl (long double x); 
__EXTERN long double tanhl (long double x); 
 
__INLINE long double ceill (long double x); 
__INLINE long double floorl(long double x); 
 
__EXTERN long double fabsl (long double x); 
 
__EXTERN long double ldexpl(long double x, int n); 
__EXTERN long double frexpl(long double x, int *exp); 
__EXTERN long double modfl (long double x, long double *ip); 
__EXTERN long double fmodl (long double x, long double y); 
 
/* An inline version of fmod that works for limited domain only */ 
/* See comments in implementation below */ 
static inline long double _FMODL(long double x, long double y); 
 
__EXTERN long double _roundl(long double x); /* round-to-nearest */ 
__EXTERN long double _truncl(long double x); /* truncate towards 0 */ 
 
} 
 
#ifdef _TI_ENHANCED_MATH_H 
#if 0 
/* ------------------------------------------------- */ 
/* Routines below are an addition to ANSI math.h     */ 
/* Some (noted with "9x" in comment) will become ANSI*/ 
/* once C9x is approved.                             */ 
/* ------------------------------------------------- */ 
#endif 
 
#define HUGE_VALL LDBL_MAX /* ## */ 
 
extern "C" namespace std 
{ 
__EXTERN long double rsqrtl(long double x); /*   1/sqrtl(x) but *MUCH* faster*/ 
__EXTERN long double exp2l (long double x); /*9x math equiv to powl(2.0 ,x)  */ 
__EXTERN long double exp10l(long double x); /*   math equiv to powl(10.0,x)  */ 
__EXTERN long double log2l (long double x);/*9x math equiv to logl(x)/logl(2)*/ 
 
__EXTERN long double powil (long double x, int i); /* == powl(x,(long double)i)*/ 
 
__EXTERN long double cotl  (long double x); 
__EXTERN long double acotl (long double x); 
__EXTERN long double acot2l(long double x, long double y); 
 
__EXTERN long double cothl (long double x); 
 
__EXTERN long double asinhl(long double x); /* 9x */ 
__EXTERN long double acoshl(long double x); /* 9x */ 
__EXTERN long double atanhl(long double x); /* 9x */ 
__EXTERN long double acothl(long double x); 
 
#define roundl(x) _roundl(x) /* 9x round-to-nearest   */ 
#define truncl(x) _truncl(x) /* 9x truncate towards 0 */ 
 
} /* namespace */ 
 
#endif 
 
 
#ifdef _INLINE 
/****************************************************************************/ 
/*  Inline versions of floorl, ceill, fmodl                                 */ 
/****************************************************************************/ 
 
static inline long double std::floorl(long double x)  
{ 
   long double y;  
   return (std::modfl(x, &y) < 0 ? y - 1 : y); 
} 
 
static inline long double std::ceill(long double x) 
{ 
   long double y;  
   return (std::modfl(x, &y) > 0 ? y + 1 : y); 
} 
 
/*  
   The implementation below does not work correctly for all cases. 
   Consider the case of fmod(Big, 3), for any Big > 2**(MANT_DIG+2). 
   The correct result is one of 0,1, or 2. 
   But the implementation below will *always* return 0  
   because the quotient is only an approximation. 
*/ 
static inline long double std::_FMODL(long double x, long double y) 
{ 
   long double d = std::fabsl(x);  
   if (d - std::fabsl(y) == d) return (0); 
   std::modfl(x/y, &d);   
   return (x - d * y); 
} 
 
#endif 
 
#include  
 
#endif /* long double is/isnot different than double */ 
 
#endif /* __cmathl__ */