1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 2011 Chun-wei Fan <fanc999@yahoo.com.tw>
3  *
4  * Author: Chun-wei Fan <fanc999@yahoo.com.tw>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #include "config.h"
21 
22 #include <float.h>
23 
24 #ifndef HAVE_DECL_ISNAN
25 /* it seems of the supported compilers only
26  * MSVC does not have isnan(), but it does
27  * have _isnan() which does the same as isnan()
28  */
29 static inline gboolean
isnan(double x)30 isnan (double x)
31 {
32   return _isnan (x);
33 }
34 #endif
35 
36 #ifndef HAVE_DECL_ISINF
37 /* Unfortunately MSVC does not have finite()
38  * but it does have _finite() which is the same
39  * as finite() except when x is a NaN
40  */
41 static inline gboolean
isinf(double x)42 isinf (double x)
43 {
44   return (!_finite (x) && !_isnan (x));
45 }
46 #endif
47 
48 /* Workaround for round() for non-GCC/non-C99 compilers */
49 #ifndef HAVE_ROUND
50 static inline double
round(double x)51 round (double x)
52 {
53   if (x >= 0)
54     return floor (x + 0.5);
55   else
56     return ceil (x - 0.5);
57 }
58 #endif
59