//////////////////////////////////////////////////////////////////////////
//                                                                      
// cmath -                                                             
//                                                                      
//      This file includes declarations of the functions for 
//      the standart math libruary. Matches to ANSI.
//                                                                      
// Copyright (c) 2001 RC Module Inc.                                    
//                                                                      
//                                                                     
//    $Revision:: 4     $      $Date:: 11.05.01 16:12   $               
//                                                                      
//////////////////////////////////////////////////////////////////////////

#ifndef	_CMATH_HEADER
#define	_CMATH_HEADER


#include <_nsstd.h>

_NS_STD_BEGIN

#ifdef __cplusplus
#define INLINE_IF_CPP inline
extern "C" {
#else
#define INLINE_IF_CPP
#endif

float sqrtf( float );
float fmodf( float, float );
float powf( float, float );
float tanhf( float );
float coshf( float );
float sinhf( float );
float tanf( float );
float atan2f( float, float );
float acosf( float );
float asinf( float );
float modff( float, float* );
float ceilf( float );
float floorf( float );
float fabsf( float );
float log10f( float );
float logf( float );
float expf( float );
float frexpf( float, int* );
float ldexpf( float, int );

float __sinCosf( float f, int isCos );
float __sinf_cordic( float f );
float __cosf_cordic( float f );
//inline float sinf(float f){	return __sinCosf( f, 0 );}
//inline float cosf(float f){	return __sinCosf( f, 1 );}
INLINE_IF_CPP float sinf(float f){	return __sinf_cordic( f );}
INLINE_IF_CPP float cosf(float f){	return __cosf_cordic( f );}

double sqrt (double);
double fmod (double, double);
double pow (double, double);
double tanh (double);
double cosh (double);
double sinh (double);
double tan (double);
double atan2 (double, double );
double acos (double);
double asin (double);
double modf (double, double* );
double ceil (double);
double floor (double);
double fabs (double);
double log10 (double);
double log (double);
double sin (double);
double cos (double);
double exp (double);
double frexp( double, int* );
double ldexp( double, int );

#ifdef __cplusplus
}
#endif


    // Changes specified by the C++ Standard

#ifdef __cplusplus

inline float sqrt( float f) {return sqrtf( f );}
inline float fmod( float x, float y) {return fmodf( x, y );}
inline float pow( float x, float y) {return powf( x, y );}
inline float tanh( float f) {return tanhf( f );}
inline float cosh( float f) {return coshf( f );}
inline float sinh( float f) {return sinhf( f );}
inline float tan( float f) {return tanf( f );}
inline float atan2( float f, float fX) {return atan2f( f, fX );}
inline float acos( float f) {return acosf( f );}
inline float asin( float f) {return asinf( f );}
inline float modf( float f, float* pf) {return modff( f, pf );}
inline float ceil( float f) {return ceilf( f );}
inline float floor( float f) {return floorf( f );}
inline float fabs( float f) {return fabsf( f );}
inline float log10( float f) {return log10f( f );}
inline float log( float f) {return logf( f );}
inline float exp( float f) {return expf( f );}
inline float sin( float f) {return sinf( f );}
inline float cos( float f) {return cosf( f );}
inline float frexp( float f, int* ip) {return frexpf( f, ip );}
inline float ldexp( float f, int i) {return ldexpf( f, i );}

inline long double sqrtl(long double _X)  {return (sqrt((double)_X)); }
inline long double fmodl( long double _X, long double _Y) 
	{return fmod( (double)_X, (double)_Y );}
inline long double powl( long double _X, long double _Y) 
	{return pow( (double)_X, (double)_Y );}
inline long double tanhl(long double _X)  {return (tanh((double)_X)); }
inline long double coshl(long double _X)  {return (cosh((double)_X)); }
inline long double sinhl(long double _X)  {return (sinh((double)_X)); }
inline long double tanl(long double _X)  {return (tan((double)_X)); }
inline long double atan2l(long double _X, long double _Y)  
	{return (atan2((double)_X, (double)_Y)); }
inline long double acosl(long double _X)  {return (acos((double)_X)); }
inline long double asinl(long double _X)  {return (asin((double)_X)); }
inline long double modfl(long double _X, long double* _Y)  
	{return (modf((double)_X, (double*)_Y)); }
inline long double ceill(long double _X)  {return (ceil((double)_X)); }
inline long double floorl(long double _X)  {return (floor((double)_X)); }
inline long double fabsl(long double _X)  {return (fabs((double)_X)); }
inline long double log10l(long double _X)  {return (log10((double)_X)); }
inline long double logl(long double _X)  {return (log((double)_X)); }
inline long double sinl(long double _X)  {return (sin((double)_X)); }
inline long double cosl(long double _X)  {return (cos((double)_X)); }
inline long double expl(long double _X)  {return (exp((double)_X)); }
inline long double frexpl(long double _X, int *_Y)
        {return (frexp((double)_X, _Y)); }
inline long double ldexpl(long double _X, int _Y)
        {return (ldexp((double)_X, _Y)); }

inline long double sqrt(long double _X)  {return (sqrt((double)_X)); }
inline long double fmod( long double _X, long double _Y) 
	{return fmod( (double)_X, (double)_Y );}
inline long double pow( long double _X, long double _Y) 
	{return pow( (double)_X, (double)_Y );}
inline long double tanh(long double _X)  {return (tanh((double)_X)); }
inline long double cosh(long double _X)  {return (cosh((double)_X)); }
inline long double sinh(long double _X)  {return (sinh((double)_X)); }
inline long double tan(long double _X)  {return (tan((double)_X)); }
inline long double atan2(long double _X, long double _Y)  
	{return (atan2((double)_X, (double)_Y)); }
inline long double acos(long double _X)  {return (acos((double)_X)); }
inline long double asin(long double _X)  {return (asin((double)_X)); }
inline long double modf(long double _X, long double* _Y)  
	{return (modf((double)_X, (double*)_Y)); }
inline long double ceil(long double _X)  {return (ceil((double)_X)); }
inline long double floor(long double _X)  {return (floor((double)_X)); }
inline long double fabs(long double _X)  {return (fabs((double)_X)); }
inline long double log10(long double _X)  {return (log10((double)_X)); }
inline long double log(long double _X)  {return (log((double)_X)); }
inline long double sin(long double _X)  {return (sin((double)_X)); }
inline long double cos(long double _X)  {return (cos((double)_X)); }
inline long double exp(long double _X)  {return (exp((double)_X)); }
inline long double frexp(long double _X, int *_Y)
        {return (frexp((double)_X, _Y)); }
inline long double ldexp(long double _X, int _Y)
        {return (ldexp((double)_X, _Y)); }


inline double abs(double _x) 	{return fabs(_x);}
inline float abs(float _x) 	{return fabsf(_x);}
inline long double abs(long double _X)  {return (fabs((double)_X)); }


inline float atan(float _x) {return atan2f( _x, 1);}
inline double atan(double _x) {return atan2( _x, 1);}
inline float atanf(float _x) {return atan2f( _x, 1);}
inline long double atanl(long double _X) {return (atan2((double)_X, 1.0)); }
inline long double atan(long double _X) {return (atan2((double)_X, 1.0)); }


inline long double pow( long double _X, int _Y) 
		{return pow( (double)_X, (double)_Y );}
inline double pow( double _X, int _Y) {return pow( _X, (double)_Y );}
inline float pow( float _X, int _Y) {return powf( _X, (float)_Y );}

#endif

_NS_STD_END


#endif  // _CMATH_HEADER
