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