// -*- C++ -*- /*************************************************************************** * * cmath - C++ Standard library interface to the ANSI C header math.h * * $Id: //stdlib/dev/include/ansi/cmath#38 $ * *************************************************************************** * * Copyright (c) 1994-2005 Quovadx, Inc., acting through its Rogue Wave * Software division. Licensed under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0. Unless required by * applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License * for the specific language governing permissions and limitations under * the License. * **************************************************************************/ #ifndef _RWSTD_CMATH_INCLUDED #define _RWSTD_CMATH_INCLUDED #include #ifndef _RWSTD_NO_PURE_C_HEADERS # include #else #ifndef _RWSTD_NO_DEPRECATED_C_HEADERS _RWSTD_NAMESPACE (std) { // avoid a conflicting exception structure on platforms where // struct exception is defined unguarded in #ifndef _RWSTD_NO_MATH_EXCEPTION # undef exception # define exception _Math_exception #endif // _RWSTD_NO_MATH_EXCEPTION #include _RWSTD_ANSI_C_MATH_H #undef exception } // namespace std #else // if defined (_RWSTD_NO_DEPRECATED_C_HEADERS) // avoid a conflicting exception structure on platforms where // struct exception is defined unguarded in #ifndef _RWSTD_NO_MATH_EXCEPTION # undef exception # define exception math_exception #endif // _RWSTD_NO_MATH_EXCEPTION #include _RWSTD_ANSI_C_MATH_H #undef exception #undef abs #undef acos #undef asin #undef atan #undef atan2 #undef cos #undef exp #undef fabs #undef log #undef log10 #undef sin #undef sqrt #undef tan #ifndef _RWSTD_NO_ACOSF # define _ACOSF(x) ::acosf (x) #elif !defined (_RWSTD_NO_ACOSF_IN_LIBM) # undef acosf extern "C" float acosf (float); # define _ACOSF(x) ::acosf (x) #else # define _ACOSF(x) ::acos (double (x)) #endif // _RWSTD_NO_ACOSF #ifndef _RWSTD_NO_ASINF # define _ASINF(x) ::asinf (x) #elif !defined (_RWSTD_NO_ASINF_IN_LIBM) # undef asinf extern "C" float asinf (float); # define _ASINF(x) ::asinf (x) #else # define _ASINF(x) ::asin (double (x)) #endif // _RWSTD_NO_ASINF #ifndef _RWSTD_NO_ATANF # define _ATANF(x) ::atanf (x) #elif !defined (_RWSTD_NO_ATANF_IN_LIBM) # undef atanf extern "C" float atanf (float); # define _ATANF(x) ::atanf (x) #else # define _ATANF(x) ::atan (double (x)) #endif // _RWSTD_NO_ATANF #ifndef _RWSTD_NO_ATAN2F # define _ATAN2F(x, y) ::atan2f (x, y) #elif !defined (_RWSTD_NO_ATAN2F_IN_LIBM) # undef atan2f extern "C" float atan2f (float, float); # define _ATAN2F(x, y) ::atan2f (x, y) #else # define _ATAN2F(x, y) ::atan2 (double (x), double (y)) #endif // _RWSTD_NO_ATAN2F #ifndef _RWSTD_NO_CEILF # define _CEILF(x) ::ceilf (x) #elif !defined (_RWSTD_NO_CEILF_IN_LIBM) # undef ceilf extern "C" float ceilf (float); # define _CEILF(x) ::ceilf (x) #else # define _CEILF(x) ::ceil (double (x)) #endif // _RWSTD_NO_CEILF #ifndef _RWSTD_NO_COSF # define _COSF(x) ::cosf (x) #elif !defined (_RWSTD_NO_COSF_IN_LIBM) # undef cosf extern "C" float cosf (float); # define _COSF(x) ::cosf (x) #else # define _COSF(x) ::cos (double (x)) #endif // _RWSTD_NO_COSF #ifndef _RWSTD_NO_COSHF # define _COSHF(x) ::coshf (x) #elif !defined (_RWSTD_NO_COSHF_IN_LIBM) # undef coshf extern "C" float coshf (float); # define _COSHF(x) ::coshf (x) #else # define _COSHF(x) ::cosh (double (x)) #endif // _RWSTD_NO_COSHF #ifndef _RWSTD_NO_EXPF # define _EXPF(x) ::expf (x) #elif !defined (_RWSTD_NO_EXPF_IN_LIBM) # undef expf extern "C" float expf (float); # define _EXPF(x) ::expf (x) #else # define _EXPF(x) ::exp (double (x)) #endif // _RWSTD_NO_EXPF #ifndef _RWSTD_NO_FABSF # define _FABSF(x) fabsf (x) #elif !defined (_RWSTD_NO_FABSF_IN_LIBM) # undef fabsf extern "C" float fabsf (float); # define _FABSF(x) ::fabsf (x) #else # define _FABSF(x) ::fabs (double (x)) #endif // _RWSTD_NO_FABSF #ifndef _RWSTD_NO_FLOORF # define _FLOORF(x) ::floorf (x) #elif !defined (_RWSTD_NO_FLOORF_IN_LIBM) # undef floorf extern "C" float floorf (float); # define _FLOORF(x) ::floorf (x) #else # define _FLOORF(x) ::floor (double (x)) #endif // _RWSTD_NO_FLOORF #ifndef _RWSTD_NO_FMODF # define _FMODF(x, y) ::fmodf (x, y) #elif !defined (_RWSTD_NO_FMODF_IN_LIBM) # undef fmodf extern "C" float fmodf (float, float); # define _FMODF(x, y) ::fmodf (x, y) #else # define _FMODF(x, y) ::fmod (double (x), double (y)) #endif // _RWSTD_NO_FMODF #ifndef _RWSTD_NO_FREXPF # define _FREXPF(x, y) ::frexpf (x, y) #elif !defined (_RWSTD_NO_FREXPF_IN_LIBM) # undef frexpf extern "C" float frexpf (float, int*); # define _FREXPF(x, y) ::frexpf (x, y) #else # define _FREXPF(x, y) ::frexp (double (x), y) #endif // _RWSTD_NO_FREXPF #ifndef _RWSTD_NO_LDEXPF # define _LDEXPF(x, y) ::ldexpf (x, y) #elif !defined (_RWSTD_NO_LDEXPF_IN_LIBM) # undef ldexpf extern "C" float ldexpf (float, int); # define _LDEXPF(x, y) ::ldexpf (x, y) #else # define _LDEXPF(x, y) ::ldexp (double (x), y) #endif // _RWSTD_NO_LDEXPF #ifndef _RWSTD_NO_LOGF # define _LOGF(x) ::logf (x) #elif !defined (_RWSTD_NO_LOGF_IN_LIBM) # undef logf extern "C" float logf (float); # define _LOGF(x) ::logf (x) #else # define _LOGF(x) ::log (double (x)) #endif // _RWSTD_NO_LOGF #ifndef _RWSTD_NO_LOG10F # define _LOG10F(x) ::log10f (x) #elif !defined (_RWSTD_NO_LOG10F_IN_LIBM) # undef log10f extern "C" float log10f (float); # define _LOG10F(x) ::log10f (x) #else # define _LOG10F(x) ::log10 (double (x)) #endif // _RWSTD_NO_LOG10F #ifndef _RWSTD_NO_MODFF # define _MODFF(x, y) ::modff (x, y) #elif !defined (_RWSTD_NO_MODFF_IN_LIBM) # undef modff extern "C" float modff (float, float*); # define _MODFF(x, y) ::modff (x, y) #else inline float __rw_modff (float __x, float *__y) { double __tmp = *__y; __x = ::modf (__x, &__tmp); *__y = __tmp; return __x; } # define _MODFF(x, y) __rw_modff (x, y) #endif // _RWSTD_NO_MODFF #ifndef _RWSTD_NO_POWF # define _POWF(x, y) ::powf (x, y) #elif !defined (_RWSTD_NO_POWF_IN_LIBM) # undef powf extern "C" float powf (float, float); # define _POWF(x, y) ::powf (x, y) #else # define _POWF(x, y) ::pow (double (x), double (y)) #endif // _RWSTD_NO_POWF #ifndef _RWSTD_NO_SINF # define _SINF(x) ::sinf (x) #elif !defined (_RWSTD_NO_SINF_IN_LIBM) # undef sinf extern "C" float sinf (float); # define _SINF(x) ::sinf (x) #else # define _SINF(x) ::sin (double (x)) #endif // _RWSTD_NO_SINF #ifndef _RWSTD_NO_SINHF # define _SINHF(x) ::sinhf (x) #elif !defined (_RWSTD_NO_SINHF_IN_LIBM) # undef sinhf extern "C" float sinhf (float); # define _SINHF(x) ::sinhf (x) #else # define _SINHF(x) ::sinh (double (x)) #endif // _RWSTD_NO_SINHF #ifndef _RWSTD_NO_SQRTF # define _SQRTF(x) ::sqrtf (x) #elif !defined (_RWSTD_NO_SQRTF_IN_LIBM) # undef sqrtf extern "C" float sqrtf (float); # define _SQRTF(x) ::sqrtf (x) #else # define _SQRTF(x) ::sqrt (double (x)) #endif // _RWSTD_NO_SQRTF #ifndef _RWSTD_NO_TANF # define _TANF(x) ::tanf (x) #elif !defined (_RWSTD_NO_TANF_IN_LIBM) # undef tanf extern "C" float tanf (float); # define _TANF(x) ::tanf (x) #else # define _TANF(x) ::tan (double (x)) #endif // _RWSTD_NO_TANF #ifndef _RWSTD_NO_TANHF # define _TANHF(x) ::tanhf (x) #elif !defined (_RWSTD_NO_TANHF_IN_LIBM) # undef tanhf extern "C" float tanhf (float); # define _TANHF(x) ::tanhf (x) #else # define _TANHF(x) ::tanh (double (x)) #endif // _RWSTD_NO_TANHF #ifndef _RWSTD_NO_ACOSL # define _ACOSL(x) ::acosl (x) #elif !defined (_RWSTD_NO_ACOSL_IN_LIBM) # undef acosl extern "C" long double acosl (long double); # define _ACOSL(x) ::acosl (x) #else # define _ACOSL(x) ::acos (double (x)) #endif // _RWSTD_NO_ACOSL #ifndef _RWSTD_NO_ASINL # define _ASINL(x) ::asinl (x) #elif !defined (_RWSTD_NO_ASINL_IN_LIBM) # undef asinl extern "C" long double asinl (long double); # define _ASINL(x) ::asinl (x) #else # define _ASINL(x) ::asin (double (x)) #endif // _RWSTD_NO_ASINL #ifndef _RWSTD_NO_ATANL # define _ATANL(x) ::atanl (x) #elif !defined (_RWSTD_NO_ATANL_IN_LIBM) # undef atanl extern "C" long double atanl (long double); # define _ATANL(x) ::atanl (x) #else # define _ATANL(x) ::atan (double (x)) #endif // _RWSTD_NO_ATANL #ifndef _RWSTD_NO_ATAN2L # define _ATAN2L(x, y) ::atan2l (x, y) #elif !defined (_RWSTD_NO_ATAN2L_IN_LIBM) # undef atan2l extern "C" long double atan2l (long double, long double); # define _ATAN2L(x, y) ::atan2l (x, y) #else # define _ATAN2L(x, y) ::atan2 (double (x), double (y)) #endif // _RWSTD_NO_ATAN2L #ifndef _RWSTD_NO_CEILL # define _CEILL(x) ::ceill (x) #elif !defined (_RWSTD_NO_CEILL_IN_LIBM) # undef ceill extern "C" double ceill (double); # define _CEILL(x) ::ceill (x) #else # define _CEILL(x) ::ceil (double (x)) #endif // _RWSTD_NO_CEILL #ifndef _RWSTD_NO_COSL # define _COSL(x) ::cosl (x) #elif !defined (_RWSTD_NO_COSL_IN_LIBM) # undef cosl extern "C" long double cosl (long double); # define _COSL(x) ::cosl (x) #else # define _COSL(x) ::cos (double (x)) #endif // _RWSTD_NO_COSL #ifndef _RWSTD_NO_COSHL # define _COSHL(x) ::coshl (x) #elif !defined (_RWSTD_NO_COSHL_IN_LIBM) # undef coshl extern "C" long double coshl (long double); # define _COSHL(x) ::coshl (x) #else # define _COSHL(x) ::cosh (double (x)) #endif // _RWSTD_NO_COSHL #ifndef _RWSTD_NO_EXPL # define _EXPL(x) ::expl (x) #elif !defined (_RWSTD_NO_EXPL_IN_LIBM) # undef expl extern "C" long double expl (long double); # define _EXPL(x) ::expl (x) #else # define _EXPL(x) ::exp (double (x)) #endif // _RWSTD_NO_EXPL #ifndef _RWSTD_NO_FABSL # define _FABSL(x) ::fabsl (x) #elif !defined (_RWSTD_NO_FABSL_IN_LIBM) # undef fabsl extern "C" long double fabsl (long double); # define _FABSL(x) ::fabsl (x) #else # define _FABSL(x) ::fabs (double (x)) #endif // _RWSTD_NO_FABSL #ifndef _RWSTD_NO_FLOORL # define _FLOORL(x) ::floorl (x) #elif !defined (_RWSTD_NO_FLOORL_IN_LIBM) # undef floorl extern "C" long double floorl (long double); # define _FLOORL(x) ::floorl (x) #else # define _FLOORL(x) ::floor (double (x)) #endif // _RWSTD_NO_FLOORL #ifndef _RWSTD_NO_FMODL # define _FMODL(x, y) ::fmodl (x, y) #elif !defined (_RWSTD_NO_FMODL_IN_LIBM) # undef fmodl extern "C" long double fmodl (long double, long double); # define _FMODL(x, y) ::fmodl (x, y) #else # define _FMODL(x, y) ::fmod (double (x), double (y)) #endif // _RWSTD_NO_FMODL #ifndef _RWSTD_NO_FREXPL # define _FREXPL(x, y) ::frexpl (x, y) #elif !defined (_RWSTD_NO_FREXPL_IN_LIBM) # undef frexpl extern "C" long double frexpl (long double, int*); # define _FREXPL(x, y) ::frexpl (x, y) #else # define _FREXPL(x, y) ::frexp (double (x), y) #endif // _RWSTD_NO_FREXPL #ifndef _RWSTD_NO_LDEXPL # define _LDEXPL(x, y) ::ldexpl (x, y) #elif !defined (_RWSTD_NO_LDEXPL_IN_LIBM) # undef ldexpl extern "C" long double ldexpl (long double, int); # define _LDEXPL(x, y) ::ldexpl (x, y) #else # define _LDEXPL(x, y) ::ldexp (double (x), y) #endif // _RWSTD_NO_LDEXPL #ifndef _RWSTD_NO_LOGL # define _LOGL(x) ::logl (x) #elif !defined (_RWSTD_NO_LOGL_IN_LIBM) # undef logl extern "C" long double logl (long double); # define _LOGL(x) ::logl (x) #else # define _LOGL(x) ::log (double (x)) #endif // _RWSTD_NO_LOGL #ifndef _RWSTD_NO_LOG10L # define _LOG10L(x) ::log10l (x) #elif !defined (_RWSTD_NO_LOG10L_IN_LIBM) # undef log10l extern "C" long double log10l (long double); # define _LOG10L(x) ::log10l (x) #else # define _LOG10L(x) ::log10 (double (x)) #endif // _RWSTD_NO_LOG10L #ifndef _RWSTD_NO_MODFL # define _MODFL(x, y) ::modfl (x, y) #elif !defined (_RWSTD_NO_MODFL_IN_LIBM) # undef modfl extern "C" long double modfl (long double, long double*); # define _MODFL(x, y) ::modfl (x, y) #else inline long double __rw_modfl (long double __x, long double *__y) { double __tmp = *__y; __x = ::modf (__x, &__tmp); *__y = __tmp; return __x; } # define _MODFL(x, y) __rw_modfl (x, y) #endif // _RWSTD_NO_MODFL #ifndef _RWSTD_NO_POWL # define _POWL(x, y) ::powl (x, y) #elif !defined (_RWSTD_NO_POWL_IN_LIBM) # undef powl extern "C" long double powl (long double, long double); # define _POWL(x, y) ::powl (x, y) #else # define _POWL(x, y) ::pow (double (x), double (y)) #endif // _RWSTD_NO_POWL #ifndef _RWSTD_NO_SINL # define _SINL(x) ::sinl (x) #elif !defined (_RWSTD_NO_SINL_IN_LIBM) # undef sinl extern "C" long double sinl (long double); # define _SINL(x) ::sinl (x) #else # define _SINL(x) ::sin (double (x)) #endif // _RWSTD_NO_SINL #ifndef _RWSTD_NO_SINHL # define _SINHL(x) ::sinhl (x) #elif !defined (_RWSTD_NO_SINHL_IN_LIBM) # undef sinhl extern "C" long double sinhl (long double); # define _SINHL(x) ::sinhl (x) #else # define _SINHL(x) ::sinh (double (x)) #endif // _RWSTD_NO_SINHL #ifndef _RWSTD_NO_SQRTL # define _SQRTL(x) ::sqrtl (x) #elif !defined (_RWSTD_NO_SQRTL_IN_LIBM) # undef sqrtl extern "C" long double sqrtl (long double); # define _SQRTL(x) ::sqrtl (x) #else # define _SQRTL(x) ::sqrt (double (x)) #endif // _RWSTD_NO_SQRTL #ifndef _RWSTD_NO_TANL # define _TANL(x) ::tanl (x) #elif !defined (_RWSTD_NO_TANL_IN_LIBM) # undef tanl extern "C" long double tanl (long double); # define _TANL(x) ::tanl (x) #else # define _TANL(x) ::tan (double (x)) #endif // _RWSTD_NO_TANL #ifndef _RWSTD_NO_TANHL # define _TANHL(x) ::tanhl (x) #elif !defined (_RWSTD_NO_TANHL_IN_LIBM) # undef tanhl extern "C" long double tanhl (long double); # define _TANHL(x) ::tanhl (x) #else # define _TANHL(x) ::tanh (double (x)) #endif // _RWSTD_NO_TANHL #if !defined (_RWSTD_NO_USING_LIBC_IN_STD) _RWSTD_NAMESPACE (std) { #endif // !_RWSTD_NO_USING_LIBC_IN_STD // float overloads #if defined (_RWSTD_NO_ABS_FLT) inline float abs (float __x) { return _FABSF (__x); } # undef _RWSTD_NO_ABS_FLT # else _USING (::abs); #endif // _RWSTD_NO_ABS_FLT #if defined (_RWSTD_NO_ACOS_FLT) inline float acos (float __x) { return _ACOSF (__x); } #endif // _RWSTD_NO_ACOS_FLT #if defined (_RWSTD_NO_ASIN_FLT) inline float asin (float __x) { return _ASINF (__x); } #endif // _RWSTD_NO_ASIN_FLT #if defined (_RWSTD_NO_ATAN_FLT) inline float atan (float __x) { return _ATANF (__x); } #endif // _RWSTD_NO_ATAN_FLT #if defined (_RWSTD_NO_ATAN2_FLT) inline float atan2 (float __x, float __y) { return _ATAN2F (__x, __y); } #endif // _RWSTD_NO_ATAN2_FLT #if defined (_RWSTD_NO_CEIL_FLT) inline float ceil (float __x) { return _CEILF (__x); } #endif // _RWSTD_NO_CEIL_FLT #if defined (_RWSTD_NO_COS_FLT) inline float cos (float __x) { return _COSF (__x); } #endif // _RWSTD_NO_COS_FLT #if defined (_RWSTD_NO_COSH_FLT) inline float cosh (float __x) { return _COSHF (__x); } #endif // _RWSTD_NO_COSH_FLT #if defined (_RWSTD_NO_EXP_FLT) inline float exp (float __x) { return _EXPF (__x); } #endif // _RWSTD_NO_EXP_FLT #if defined (_RWSTD_NO_FABS_FLT) inline float fabs (float __x) { return _FABSF (__x); } # undef _RWSTD_NO_FABS_FLT #endif // _RWSTD_NO_FABS_FLT #if defined (_RWSTD_NO_FLOOR_FLT) inline float floor (float __x) { return _FLOORF (__x); } #endif // _RWSTD_NO_FLOOR_FLT #if defined (_RWSTD_NO_FMOD_FLT) inline float fmod (float __x, float __y) { return _FMODF (__x, __y); } #endif // _RWSTD_NO_FMOD_FLT #if defined (_RWSTD_NO_FREXP_FLT) inline float frexp (float __x, int *__e) { return _FREXPF (__x, __e); } #endif // _RWSTD_NO_FREXP_FLT #if defined (_RWSTD_NO_LDEXP_FLT_INT) inline float ldexp (float __x, int __e) { return _LDEXPF (__x, __e); } #endif // _RWSTD_NO_LDEXP_FLT_INT #if defined (_RWSTD_NO_LOG_FLT) inline float log (float __x) { return _LOGF (__x); } #endif // _RWSTD_NO_LOG_FLT #if defined (_RWSTD_NO_LOG10_FLT) inline float log10 (float __x) { return _LOG10F (__x); } #endif // _RWSTD_NO_LOG10_FLT #if defined (_RWSTD_NO_MODF_FLT) inline float modf (float __x, float *__y) { return _MODFF (__x, __y); } #endif // _RWSTD_NO_MODF_FLT #ifdef _RWSTD_NO_POW_FLT inline float pow (float __x, float __y) { return _POWF (__x, __y); } #endif // _RWSTD_NO_POW_FLT #ifdef _RWSTD_NO_POW_FLT_INT inline float pow (float __x, int __y) { float __res = __y % 2 ? __x : 1; for (int __i = __y < 0 ? -__y : __y; __i >>= 1; ) { __x *= __x; if (__i % 2) __res *= __x; } return __y < 0 ? __res ? 1 / __res : -1 / __res : __y ? __res : 1; } #endif // _RWSTD_NO_POW_FLT_INT #if defined (_RWSTD_NO_SIN_FLT) inline float sin (float __x) { return _SINF (__x); } #endif // _RWSTD_NO_SIN_FLT #if defined (_RWSTD_NO_SINH_FLT) inline float sinh (float __x) { return _SINHF (__x); } #endif // _RWSTD_NO_SINH_FLT #if defined (_RWSTD_NO_SQRT_FLT) inline float sqrt (float __x) { return _SQRTF (__x); } #endif // _RWSTD_NO_SQRT_FLT #if defined (_RWSTD_NO_TAN_FLT) inline float tan (float __x) { return _TANF (__x); } #endif // _RWSTD_NO_TAN_FLT #if defined (_RWSTD_NO_TANH_FLT) inline float tanh (float __x) { return _TANHF (__x); } #endif // _RWSTD_NO_TANH_FLT // double overloads #if defined (_RWSTD_NO_ABS_DBL) inline double abs (double __x) { return ::fabs (__x); } # undef _RWSTD_NO_ABS_DBL # else _USING (::abs); #endif // _RWSTD_NO_ABS_DBL #if defined (_RWSTD_NO_POW_DBL) && !defined (_RWSTD_NO_POW_IN_LIBM) extern "C" double pow (double, double); #endif // _RWSTD_NO_POW_DBL && !_RWSTD_NO_POW_IN_LIBM #ifdef _RWSTD_NO_POW_DBL_INT inline double pow (double __x, int __y) { double __res = __y % 2 ? __x : 1; for (int __i = __y < 0 ? -__y : __y; __i >>= 1; ) { __x *= __x; if (__i % 2) __res *= __x; } return __y < 0 ? __res ? 1 / __res : -1 / __res : __y ? __res : 1; } #endif // _RWSTD_NO_POW_DBL_INT #ifndef _RWSTD_NO_LONG_DOUBLE // long double overloads #if defined (_RWSTD_NO_ABS_LDBL) inline long double abs (long double __x) { return _FABSL (__x); } # undef _RWSTD_NO_ABS_LDBL # else _USING (::abs); #endif // _RWSTD_NO_ABS_LDBL #if defined (_RWSTD_NO_ACOS_LDBL) inline long double acos (long double __x) { return _ACOSL (__x); } #endif // _RWSTD_NO_ACOS_LDBL #if defined (_RWSTD_NO_ASIN_LDBL) inline long double asin (long double __x) { return _ASINL (__x); } #endif // _RWSTD_NO_ASIN_LDBL #if defined (_RWSTD_NO_ATAN_LDBL) inline long double atan (long double __x) { return _ATANL (__x); } #endif // _RWSTD_NO_ATAN_LDBL #if defined (_RWSTD_NO_ATAN2_LDBL) inline long double atan2 (long double __x, long double __y) { return _ATAN2L (__x, __y); } #endif // _RWSTD_NO_ATAN2_LDBL #if defined (_RWSTD_NO_CEIL_LDBL) inline long double ceil (long double __x) { return _CEILL (__x); } #endif // _RWSTD_NO_CEIL_LDBL #if defined (_RWSTD_NO_COS_LDBL) inline long double cos (long double __x) { return _COSL (__x); } #endif // _RWSTD_NO_COS_LDBL #if defined (_RWSTD_NO_COSH_LDBL) inline long double cosh (long double __x) { return _COSHL (__x); } #endif // _RWSTD_NO_COSH_LDBL #if defined (_RWSTD_NO_EXP_LDBL) inline long double exp (long double __x) { return _EXPL (__x); } #endif // _RWSTD_NO_EXP_LDBL #if defined (_RWSTD_NO_FABS_LDBL) inline long double fabs (long double __x) { return _FABSL (__x); } # undef _RWSTD_NO_FABS_LDBL #endif // _RWSTD_NO_FABS_LDBL #if defined (_RWSTD_NO_FLOOR_LDBL) inline long double floor (long double __x) { return _FLOORL (__x); } #endif // _RWSTD_NO_FLOOR_LDBL #if defined (_RWSTD_NO_FMOD_LDBL) inline long double fmod (long double __x, long double __y) { return _FMODL (__x, __y); } #endif // _RWSTD_NO_FMOD_LDBL #if defined (_RWSTD_NO_FREXP_LDBL) inline long double frexp (long double __x, int *__e) { return _FREXPL (__x, __e); } #endif // _RWSTD_NO_FREXP_LDBL #if defined (_RWSTD_NO_LDEXP_LDBL_INT) inline long double ldexp (long double __x, int __e) { return _LDEXPL (__x, __e); } #endif // _RWSTD_NO_LDEXP_LDBL_INT #if defined (_RWSTD_NO_LOG_LDBL) inline long double log (long double __x) { return _LOGL (__x); } #endif // _RWSTD_NO_LOG_LDBL #if defined (_RWSTD_NO_LOG10_LDBL) inline long double log10 (long double __x) { return _LOG10L (__x); } #endif // _RWSTD_NO_LOG10_LDBL #if defined (_RWSTD_NO_MODF_LDBL) inline long double modf (long double __x, long double *__y) { return _MODFL (__x, __y); } #endif // _RWSTD_NO_MODF_LDBL #ifdef _RWSTD_NO_POW_LDBL inline long double pow (long double __x, long double __y) { return _POWL (__x, __y); } #endif // _RWSTD_NO_POW_LDBL #ifdef _RWSTD_NO_POW_LDBL_INT inline long double pow (long double __x, int __y) { long double __res = __y % 2 ? __x : 1; for (int __i = __y < 0 ? -__y : __y; __i >>= 1; ) { __x *= __x; if (__i % 2) __res *= __x; } return __y < 0 ? __res ? 1 / __res : -1 / __res : __y ? __res : 1; } #endif // _RWSTD_NO_POW_LDBL_INT #if defined (_RWSTD_NO_SIN_LDBL) inline long double sin (long double __x) { return _SINL (__x); } #endif // _RWSTD_NO_SIN_LDBL #if defined (_RWSTD_NO_SINH_LDBL) inline long double sinh (long double __x) { return _SINHL (__x); } #endif // _RWSTD_NO_SINH_LDBL #if defined (_RWSTD_NO_SQRT_LDBL) inline long double sqrt (long double __x) { return _SQRTL (__x); } #endif // _RWSTD_NO_SQRT_LDBL #if defined (_RWSTD_NO_TAN_LDBL) inline long double tan (long double __x) { return _TANL (__x); } #endif // _RWSTD_NO_TAN_LDBL #if defined (_RWSTD_NO_TANH_LDBL) inline long double tanh (long double __x) { return _TANHL (__x); } #endif // _RWSTD_NO_TANH_LDBL #endif // _RWSTD_NO_LONG_DOUBLE // using statements must come after the overloads. // working around MSVC6 PR# 27677 #if !defined (_RWSTD_NO_HONOR_STD) && !defined (_RWSTD_NO_USING_LIBC_IN_STD) _USING (::acos); _USING (::asin); _USING (::atan); _USING (::atan2); _USING (::ceil); _USING (::cos); _USING (::cosh); _USING (::exp); _USING (::fabs); _USING (::floor); _USING (::fmod); _USING (::frexp); _USING (::ldexp); _USING (::log); _USING (::log10); _USING (::modf); _USING (::pow); _USING (::sin); _USING (::sinh); _USING (::sqrt); _USING (::tan); _USING (::tanh); #endif // !_RWSTD_NO_HONOR_STD && !_RWSTD_NO_USING_LIBC_IN_STD #if !defined (_RWSTD_NO_USING_LIBC_IN_STD) } // namespace std #endif // !_RWSTD_NO_USING_LIBC_IN_STD #endif // _RWSTD_NO_DEPRECATED_C_HEADERS // MSVC provides its own complex macro #ifdef _MSC_VER # ifdef complex # undef complex # endif #endif #endif // _RWSTD_NO_PURE_C_HEADERS #endif // _RWSTD_CMATH_INCLUDED