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