| /* |
| $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_ */ |