/*
$License:
Copyright 2011 InvenSense, Inc.
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.
$
*/
/*******************************************************************************
*
* $Id: mlmath.h 5629 2011-06-11 03:13:08Z mcaramello $
*
*******************************************************************************/
#ifndef _ML_MATH_H_
#define _ML_MATH_H_
#ifndef MLMATH
// This define makes Microsoft pickup things like M_PI
#define _USE_MATH_DEFINES
#include <math.h>
#ifdef WIN32
// Microsoft doesn't follow standards
#define round(x)(((double)((long long)((x)>0?(x)+.5:(x)-.5))))
#define roundf(x)(((float )((long long)((x)>0?(x)+.5f:(x)-.5f))))
#endif
#else // MLMATH
#ifdef __cplusplus
extern "C" {
#endif
/* MPL needs below functions */
double ml_asin(double);
double ml_atan(double);
double ml_atan2(double, double);
double ml_log(double);
double ml_sqrt(double);
double ml_ceil(double);
double ml_floor(double);
double ml_cos(double);
double ml_sin(double);
double ml_acos(double);
#ifdef __cplusplus
} // extern "C"
#endif
/*
* We rename functions here to provide the hook for other
* customized math functions.
*/
#define sqrt(x) ml_sqrt(x)
#define log(x) ml_log(x)
#define asin(x) ml_asin(x)
#define atan(x) ml_atan(x)
#define atan2(x,y) ml_atan2(x,y)
#define ceil(x) ml_ceil(x)
#define floor(x) ml_floor(x)
#define fabs(x) (((x)<0)?-(x):(x))
#define round(x) (((double)((long long)((x)>0?(x)+.5:(x)-.5))))
#define roundf(x) (((float )((long long)((x)>0?(x)+.5f:(x)-.5f))))
#define cos(x) ml_cos(x)
#define sin(x) ml_sin(x)
#define acos(x) ml_acos(x)
#define pow(x,y) ml_pow(x,y)
#ifdef LINUX
/* stubs for float version of math functions */
#define cosf(x) ml_cos(x)
#define sinf(x) ml_sin(x)
#define atan2f(x,y) ml_atan2(x,y)
#define sqrtf(x) ml_sqrt(x)
#endif
#endif // MLMATH
#ifndef M_PI
#define M_PI 3.14159265358979
#endif
#ifndef ABS
#define ABS(x) (((x)>=0)?(x):-(x))
#endif
#ifndef MIN
#define MIN(x,y) (((x)<(y))?(x):(y))
#endif
#ifndef MAX
#define MAX(x,y) (((x)>(y))?(x):(y))
#endif
/*---------------------------*/
#endif /* !_ML_MATH_H_ */