williamr@2: /* williamr@2: * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: #ifndef _MATH_H williamr@2: #ifdef __cplusplus williamr@2: extern "C" { williamr@2: #endif williamr@2: #define _MATH_H williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include "_ansi.h" williamr@2: williamr@2: void MapSymbianErrorCodeToErrno(int, int); williamr@2: williamr@2: /** williamr@2: Reentrant ANSI C functions williamr@2: */ williamr@2: IMPORT_C double atan (double) __SOFTFP; williamr@2: IMPORT_C double cos (double) __SOFTFP; williamr@2: IMPORT_C double sin (double) __SOFTFP; williamr@2: IMPORT_C double tan (double) __SOFTFP; williamr@2: IMPORT_C double tanh (double) __SOFTFP; williamr@2: IMPORT_C double frexp (double, int *) __SOFTFP; williamr@2: IMPORT_C double modf (double, double *) __SOFTFP; williamr@2: IMPORT_C double ceil (double) __SOFTFP; williamr@2: IMPORT_C double fabs (double) __SOFTFP; williamr@2: IMPORT_C double floor (double) __SOFTFP; williamr@2: williamr@2: /** williamr@2: Non reentrant ANSI C functions. williamr@2: */ williamr@2: #ifndef _REENT_ONLY williamr@2: IMPORT_C double acos (double) __SOFTFP; williamr@2: IMPORT_C double asin (double) __SOFTFP; williamr@2: IMPORT_C double atan2 (double, double) __SOFTFP; williamr@2: IMPORT_C double cosh (double) __SOFTFP; williamr@2: IMPORT_C double sinh (double) __SOFTFP; williamr@2: IMPORT_C double exp (double) __SOFTFP; williamr@2: IMPORT_C double ldexp (double, int) __SOFTFP; williamr@2: IMPORT_C double log (double) __SOFTFP; williamr@2: IMPORT_C double log10 (double) __SOFTFP; williamr@2: IMPORT_C double pow (double, double) __SOFTFP; williamr@2: IMPORT_C double sqrt (double) __SOFTFP; williamr@2: IMPORT_C double fmod (double, double) __SOFTFP; williamr@2: #endif /* ! defined (_REENT_ONLY) */ williamr@2: williamr@2: /** williamr@2: Non ANSI functions provided by EPOC32 williamr@2: */ williamr@2: IMPORT_C double copysign(double, double) __SOFTFP; williamr@2: IMPORT_C double expm1 (double) __SOFTFP; williamr@2: IMPORT_C int finite (double) __SOFTFP; williamr@2: IMPORT_C int isnan (double) __SOFTFP; williamr@2: IMPORT_C int isinf (double) __SOFTFP; williamr@2: IMPORT_C double rint (double) __SOFTFP; williamr@2: IMPORT_C double scalbn (double, int) __SOFTFP; williamr@2: williamr@2: /* williamr@2: strtod, atof, etc. may return HUGE_VAL williamr@2: @internalComponent williamr@2: */ williamr@2: #define HUGE_VAL 1.7976931348623157E+308 /* KMaxTReal from e32math.h */ williamr@2: williamr@2: #ifndef _STRICT_ANSI williamr@2: williamr@2: /** williamr@2: Non ANSI double precision functions. williamr@2: */ williamr@2: extern double infinity (void); williamr@2: extern double nan (void); williamr@2: extern int ilogb (double); williamr@2: williamr@2: extern double asinh (double); williamr@2: extern double cbrt (double); williamr@2: extern double nextafter (double, double); williamr@2: williamr@2: extern double log1p (double); williamr@2: williamr@2: #ifndef _REENT_ONLY williamr@2: extern double acosh (double); williamr@2: extern double atanh (double); williamr@2: extern double remainder (double, double); williamr@2: extern double gamma (double); williamr@2: extern double gamma_r (double, int *); williamr@2: extern double lgamma (double); williamr@2: extern double lgamma_r (double, int *); williamr@2: extern double erf (double); williamr@2: extern double erfc (double); williamr@2: extern double y0 (double); williamr@2: extern double y1 (double); williamr@2: extern double yn (int, double); williamr@2: extern double j0 (double); williamr@2: extern double j1 (double); williamr@2: extern double jn (int, double); williamr@2: #define log2(x) (log (x) / M_LOG2_E) williamr@2: williamr@2: extern double hypot (double, double); williamr@2: williamr@2: extern double cabs(); williamr@2: extern double drem (double, double); williamr@2: williamr@2: #endif /* ! defined (_REENT_ONLY) */ williamr@2: williamr@2: /** williamr@2: Single precision versions of ANSI functions. williamr@2: */ williamr@2: extern float atanf (float); williamr@2: extern float cosf (float); williamr@2: extern float sinf (float); williamr@2: extern float tanf (float); williamr@2: extern float tanhf (float); williamr@2: extern float frexpf (float, int *); williamr@2: extern float modff (float, float *); williamr@2: extern float ceilf (float); williamr@2: extern float fabsf (float); williamr@2: extern float floorf (float); williamr@2: williamr@2: #ifndef _REENT_ONLY williamr@2: extern float acosf (float); williamr@2: extern float asinf (float); williamr@2: extern float atan2f (float, float); williamr@2: extern float coshf (float); williamr@2: extern float sinhf (float); williamr@2: extern float expf (float); williamr@2: extern float ldexpf (float, int); williamr@2: extern float logf (float); williamr@2: extern float log10f (float); williamr@2: extern float powf (float, float); williamr@2: extern float sqrtf (float); williamr@2: extern float fmodf (float, float); williamr@2: #endif /* ! defined (_REENT_ONLY) */ williamr@2: williamr@2: /** williamr@2: Other single precision functions. williamr@2: */ williamr@2: extern float infinityf (void); williamr@2: extern float nanf (void); williamr@2: extern int isnanf (float); williamr@2: extern int isinff (float); williamr@2: extern int finitef (float); williamr@2: extern float copysignf (float, float); williamr@2: extern int ilogbf (float); williamr@2: extern float asinhf (float); williamr@2: extern float cbrtf (float); williamr@2: extern float nextafterf (float, float); williamr@2: extern float rintf (float); williamr@2: extern float scalbnf (float, int); williamr@2: extern float log1pf (float); williamr@2: extern float expm1f (float); williamr@2: williamr@2: #ifndef _REENT_ONLY williamr@2: extern float acoshf (float); williamr@2: extern float atanhf (float); williamr@2: extern float remainderf (float, float); williamr@2: extern float gammaf (float); williamr@2: extern float gammaf_r (float, int *); williamr@2: extern float lgammaf (float); williamr@2: extern float lgammaf_r (float, int *); williamr@2: extern float erff (float); williamr@2: extern float erfcf (float); williamr@2: extern float y0f (float); williamr@2: extern float y1f (float); williamr@2: extern float ynf (int, float); williamr@2: extern float j0f (float); williamr@2: extern float j1f (float); williamr@2: extern float jnf (int, float); williamr@2: #define log2f(x) (logf (x) / (float) M_LOG2_E) williamr@2: extern float hypotf (float, float); williamr@2: extern float cabsf(); williamr@2: extern float dremf (float, float); williamr@2: #endif /* ! defined (_REENT_ONLY) */ williamr@2: williamr@2: /** williamr@2: The gamma functions use a global variable, signgam. williamr@2: */ williamr@2: extern int signgam; williamr@2: williamr@2: /** williamr@2: The exception structure passed to the matherr routine. williamr@2: */ williamr@2: struct exception williamr@2: { williamr@2: int type; williamr@2: char *name; williamr@2: double arg1; williamr@2: double arg2; williamr@2: double retval; williamr@2: int err; williamr@2: }; williamr@2: williamr@2: extern int matherr (struct exception *e); williamr@2: williamr@2: /** williamr@2: Values for the type field of struct exception. williamr@2: */ williamr@2: #define DOMAIN 1 williamr@2: #define SING 2 williamr@2: #define OVERFLOW 3 williamr@2: #define UNDERFLOW 4 williamr@2: #define TLOSS 5 williamr@2: #define PLOSS 6 williamr@2: williamr@2: /** williamr@2: Useful constants. williamr@2: */ williamr@2: #define M_E 2.7182818284590452354 williamr@2: #define M_LOG2E 1.4426950408889634074 williamr@2: #define M_LOG10E 0.43429448190325182765 williamr@2: #define M_LN2 0.69314718055994530942 williamr@2: #define M_LN10 2.30258509299404568402 williamr@2: #define M_PI 3.14159265358979323846 williamr@2: #define M_TWOPI (M_PI * 2.0) williamr@2: #define M_PI_2 1.57079632679489661923 williamr@2: #define M_PI_4 0.78539816339744830962 williamr@2: #define M_3PI_4 2.3561944901923448370E0 williamr@2: #define M_SQRTPI 1.77245385090551602792981 williamr@2: #define M_1_PI 0.31830988618379067154 williamr@2: #define M_2_PI 0.63661977236758134308 williamr@2: #define M_2_SQRTPI 1.12837916709551257390 williamr@2: #define M_SQRT2 1.41421356237309504880 williamr@2: #define M_SQRT1_2 0.70710678118654752440 williamr@2: #define M_LN2LO 1.9082149292705877000E-10 williamr@2: #define M_LN2HI 6.9314718036912381649E-1 williamr@2: #define M_SQRT3 1.73205080756887719000 williamr@2: #define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */ williamr@2: #define M_LOG2_E 0.693147180559945309417 williamr@2: #define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */ williamr@2: williamr@2: /** williamr@2: Global control over fdlibm error handling. williamr@2: */ williamr@2: enum __fdlibm_version williamr@2: { williamr@2: __fdlibm_ieee = -1, williamr@2: __fdlibm_svid, williamr@2: __fdlibm_xopen, williamr@2: __fdlibm_posix williamr@2: }; williamr@2: williamr@2: #define _LIB_VERSION_TYPE enum __fdlibm_version williamr@2: #define _LIB_VERSION __fdlib_version williamr@2: williamr@2: extern _LIB_VERSION_TYPE _LIB_VERSION; williamr@2: williamr@2: #define _IEEE_ __fdlibm_ieee williamr@2: #define _SVID_ __fdlibm_svid williamr@2: #define _XOPEN_ __fdlibm_xopen williamr@2: #define _POSIX_ __fdlibm_posix williamr@2: williamr@2: #endif /* ! defined (_STRICT_ANSI) */ williamr@2: williamr@2: #ifdef __cplusplus williamr@2: } williamr@2: #endif williamr@2: #endif /* _MATH_H */