3d0e6b239301666726e7034362e607f4c51685f1
[scilab.git] / scilab / modules / core / includes / core_math.h
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12
13 #ifndef __BASE_MATH_H__
14 #define __BASE_MATH_H__
15 #include <limits.h>
16 #include <math.h>
17
18 #ifdef __STDC__
19 #include <stdlib.h>
20 #endif
21
22 #ifndef _MSC_VER
23 #endif
24
25 #ifdef _MSC_VER     //windows
26 #include <float.h>
27 #define finite(x) _finite(x)
28 #else               //linux & mac
29 #ifdef __cplusplus // C++
30 #define finite(x) std::isfinite(x)
31 #endif
32 #endif /* _MSC_VER */
33
34 #ifdef _MSC_VER     // windows
35 #include <float.h>
36 #define ISNAN(x) _isnan(x)
37 #else
38 #ifndef __cplusplus // C
39 #define ISNAN(x) isnan(x)
40 #else //C++
41 #define ISNAN(x) std::isnan(x)
42 #endif
43 #endif
44
45 #define Abs(x) ( ( (x) >= 0) ? (x) : -( x) )
46 #ifndef Min
47 #define Min(x,y)        (((x)<(y))?(x):(y))
48 #endif
49
50 #ifndef Max
51 #define Max(x,y)        (((x)>(y))?(x):(y))
52 #endif
53
54 #define PI0 (int *) 0
55 #define PD0 (double *) 0
56 #define SMDOUBLE 1.e-200 /* Smalest number to avoid dividing by zero */
57
58 /* angle conversion */
59 #define PI_OVER_180  0.01745329251994329576913914624236578987393
60 #define _180_OVER_PI 57.29577951308232087665461840231273527024
61 #define DEG2RAD(x) ((x) * PI_OVER_180  )
62 #define RAD2DEG(x) ((x) * _180_OVER_PI )
63
64 #ifdef round
65 #undef round
66 #endif
67
68 #define         round(a)        (int)(((a)<0.0)?(a)-.5:(a)+.5)
69 #define EPSILON 1.0e-13
70
71
72 /**
73   if we suppose that the x transmited is in the range of integers
74   we could also use :
75   #define inint(x) (( x > 0 ) ? ((int) (x + 0.5)) : ((int) (x - 0.5));
76  **/
77
78 #define linint(x) ((int)  floor(x + 0.5 ))
79 #define inint(x) ((int) floor(x + 0.5 ))
80
81 #if (defined(sun) && defined(SYSV))
82 #include <ieeefp.h>
83 #endif
84
85 #if defined(_MSC_VER)
86 #define M_PI 3.14159265358979323846
87 #else
88 #if defined(HAVE_VALUES_H)
89 #include <values.h>
90 #else
91 #if defined(HAVE_LIMITS_H)
92 #include <limits.h>
93 #endif
94 #endif
95 #endif
96
97 #ifndef M_PI
98 #define M_PI 3.14159265358979323846
99 #endif
100
101 #ifndef HAVE_EXP10
102 #define log_10_ 2.3025850929940456840179914546844
103 /* Provide a macro to do exp10 */
104 #define exp10(x) exp( (log_10_) * (x) )
105 #endif
106
107 #endif /* __BASE_MATH_H__ */
108