blob: 1b963b6caa41176d4dd5ce126d5bb16a5f1c138a [file] [log] [blame]
// -*- C++ -*-
/***************************************************************************
*
* cmath - C++ Standard library interface to the ANSI C header math.h
*
* $Id$
*
***************************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you 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.
*
* Copyright 1994-2006 Rogue Wave Software.
*
**************************************************************************/
#ifndef _RWSTD_CMATH_INCLUDED
#define _RWSTD_CMATH_INCLUDED
#include <rw/_defs.h>
#ifndef _RWSTD_NO_PURE_C_HEADERS
# include <ansi/_cmath.h>
#else
#ifndef _RWSTD_NO_DEPRECATED_C_HEADERS
_RWSTD_NAMESPACE (std) {
// avoid a conflicting exception structure on platforms where
// struct exception is defined unguarded in <math.h>
#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 <math.h>
#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