1/* 2 $License: 3 Copyright 2011 InvenSense, Inc. 4 5 Licensed under the Apache License, Version 2.0 (the "License"); 6 you may not use this file except in compliance with the License. 7 You may obtain a copy of the License at 8 9 http://www.apache.org/licenses/LICENSE-2.0 10 11 Unless required by applicable law or agreed to in writing, software 12 distributed under the License is distributed on an "AS IS" BASIS, 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 See the License for the specific language governing permissions and 15 limitations under the License. 16 $ 17 */ 18/******************************************************************************* 19 * 20 * $Id: mlmath.h 5629 2011-06-11 03:13:08Z mcaramello $ 21 * 22 *******************************************************************************/ 23 24#ifndef _ML_MATH_H_ 25#define _ML_MATH_H_ 26 27#ifndef MLMATH 28// This define makes Microsoft pickup things like M_PI 29#define _USE_MATH_DEFINES 30#include <math.h> 31 32#ifdef WIN32 33// Microsoft doesn't follow standards 34#define round(x)(((double)((long long)((x)>0?(x)+.5:(x)-.5)))) 35#define roundf(x)(((float )((long long)((x)>0?(x)+.5f:(x)-.5f)))) 36#endif 37 38#else // MLMATH 39 40#ifdef __cplusplus 41extern "C" { 42#endif 43/* MPL needs below functions */ 44double ml_asin(double); 45double ml_atan(double); 46double ml_atan2(double, double); 47double ml_log(double); 48double ml_sqrt(double); 49double ml_ceil(double); 50double ml_floor(double); 51double ml_cos(double); 52double ml_sin(double); 53double ml_acos(double); 54#ifdef __cplusplus 55} // extern "C" 56#endif 57 58/* 59 * We rename functions here to provide the hook for other 60 * customized math functions. 61 */ 62#define sqrt(x) ml_sqrt(x) 63#define log(x) ml_log(x) 64#define asin(x) ml_asin(x) 65#define atan(x) ml_atan(x) 66#define atan2(x,y) ml_atan2(x,y) 67#define ceil(x) ml_ceil(x) 68#define floor(x) ml_floor(x) 69#define fabs(x) (((x)<0)?-(x):(x)) 70#define round(x) (((double)((long long)((x)>0?(x)+.5:(x)-.5)))) 71#define roundf(x) (((float )((long long)((x)>0?(x)+.5f:(x)-.5f)))) 72#define cos(x) ml_cos(x) 73#define sin(x) ml_sin(x) 74#define acos(x) ml_acos(x) 75 76#define pow(x,y) ml_pow(x,y) 77 78#ifdef LINUX 79/* stubs for float version of math functions */ 80#define cosf(x) ml_cos(x) 81#define sinf(x) ml_sin(x) 82#define atan2f(x,y) ml_atan2(x,y) 83#define sqrtf(x) ml_sqrt(x) 84#endif 85 86 87 88#endif // MLMATH 89 90#ifndef M_PI 91#define M_PI 3.14159265358979 92#endif 93 94#ifndef ABS 95#define ABS(x) (((x)>=0)?(x):-(x)) 96#endif 97 98#ifndef MIN 99#define MIN(x,y) (((x)<(y))?(x):(y)) 100#endif 101 102#ifndef MAX 103#define MAX(x,y) (((x)>(y))?(x):(y)) 104#endif 105 106/*---------------------------*/ 107#endif /* !_ML_MATH_H_ */ 108