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