149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*
249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow $License:
349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow $
549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*******************************************************************************
749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * $Id: mlmath.h 5629 2011-06-11 03:13:08Z mcaramello $
949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
1049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *******************************************************************************/
1149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
1249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef _ML_MATH_H_
1349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define	_ML_MATH_H_
1449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
1549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef MLMATH
1649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow// This define makes Microsoft pickup things like M_PI
1749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define _USE_MATH_DEFINES
1849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <math.h>
1949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
2049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef WIN32
2149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow// Microsoft doesn't follow standards
2249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define  round(x)(((double)((long long)((x)>0?(x)+.5:(x)-.5))))
2349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define roundf(x)(((float )((long long)((x)>0?(x)+.5f:(x)-.5f))))
2449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
2549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
2649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#else  // MLMATH
2749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
2849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef __cplusplus
2949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowextern "C" {
3049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
3149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* MPL needs below functions */
3249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble	ml_asin(double);
3349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble	ml_atan(double);
3449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble	ml_atan2(double, double);
3549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble	ml_log(double);
3649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble	ml_sqrt(double);
3749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble	ml_ceil(double);
3849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble	ml_floor(double);
3949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble  ml_cos(double);
4049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble  ml_sin(double);
4149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowdouble  ml_acos(double);
4249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef __cplusplus
4349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow} // extern "C"
4449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
4549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
4649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*
4749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * We rename functions here to provide the hook for other
4849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * customized math functions.
4949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
5049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define	sqrt(x)      ml_sqrt(x)
5149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define	log(x)       ml_log(x)
5249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define	asin(x)      ml_asin(x)
5349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define	atan(x)      ml_atan(x)
5449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define	atan2(x,y)   ml_atan2(x,y)
5549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define	ceil(x)      ml_ceil(x)
5649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define	floor(x)     ml_floor(x)
5749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define fabs(x)      (((x)<0)?-(x):(x))
5849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define round(x)     (((double)((long long)((x)>0?(x)+.5:(x)-.5))))
5949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define roundf(x)    (((float )((long long)((x)>0?(x)+.5f:(x)-.5f))))
6049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define cos(x)       ml_cos(x)
6149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define sin(x)       ml_sin(x)
6249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define acos(x)      ml_acos(x)
6349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
6449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define pow(x,y)     ml_pow(x,y)
6549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
6649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef LINUX
6749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* stubs for float version of math functions */
6849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define cosf(x)      ml_cos(x)
6949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define sinf(x)      ml_sin(x)
7049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define atan2f(x,y)  ml_atan2(x,y)
7149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define sqrtf(x)     ml_sqrt(x)
7249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
7349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
7449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
7549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
7649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif // MLMATH
7749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
7849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef M_PI
7949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define M_PI 3.14159265358979
8049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
8149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
8249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef ABS
8349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ABS(x) (((x)>=0)?(x):-(x))
8449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
8549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
8649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef MIN
8749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MIN(x,y) (((x)<(y))?(x):(y))
8849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
8949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
9049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef MAX
9149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MAX(x,y) (((x)>(y))?(x):(y))
9249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
9349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
9449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*---------------------------*/
9549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif /* !_ML_MATH_H_ */
96