1 /*
2 Copyright (C) 2017-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5 
6 /*
7 	WARNING: This file was generated by the dkct program (see
8 	http://dktools.sourceforge.net/ for details).
9 	Changes you make here will be lost if dkct is run again!
10 	You should modify the original source and run dkct on it.
11 	Original source: dk4math.ctr
12 */
13 
14 /**	@file dk4math.c The dk4math module.
15 */
16 
17 
18 #include "dk4conf.h"
19 #include <libdk4c/dk4math.h>
20 
21 
22 
23 #if (!(DK4_HAVE_RINT))
24 double
dk4ma_rint(double x)25 dk4ma_rint(double x)
26 {
27 	return (floor(x+0.5));
28 }
29 #endif
30 
31 
32 
33 #if	(!(DK4_HAVE_ISGREATER))
34 int
dk4ma_isgreater(double a,double b)35 dk4ma_isgreater(double a, double b)
36 {
37 	int		back = 0;
38 #if DK4_HAVE_ISFINITE
39 	if ((isfinite(a)) && (isfinite(b))) {
40 #else
41 #if	DK4_HAVE__FINITE
42 	if ((_finite(a)) && (_finite(b))) {
43 #endif
44 #endif
45 		if (a > b) {
46 			back = 1;
47 		}
48 #if DK4_HAVE_ISFINITE
49 	}
50 #else
51 #if	DK4_HAVE__FINITE
52 	}
53 #endif
54 #endif
55 	return back;
56 }
57 #endif
58 
59 
60 
61 #if	(!(DK4_HAVE_ISGREATEREQUAL))
62 int
dk4ma_isgreaterequal(double a,double b)63 dk4ma_isgreaterequal(double a, double b)
64 {
65 	int		back = 0;
66 #if DK4_HAVE_ISFINITE
67 	if ((isfinite(a)) && (isfinite(b))) {
68 #else
69 #if	DK4_HAVE__FINITE
70 	if ((_finite(a)) && (_finite(b))) {
71 #endif
72 #endif
73 		if (a >= b) {
74 			back = 1;
75 		}
76 #if DK4_HAVE_ISFINITE
77 	}
78 #else
79 #if	DK4_HAVE__FINITE
80 	}
81 #endif
82 #endif
83 	return back;
84 }
85 #endif
86 
87 
88 
89 #if (!(DK4_HAVE_ISLESS))
90 int
dk4ma_isless(double a,double b)91 dk4ma_isless(double a, double b)
92 {
93 	int		back = 0;
94 #if DK4_HAVE_ISFINITE
95 	if ((isfinite(a)) && (isfinite(b))) {
96 #else
97 #if	DK4_HAVE__FINITE
98 	if ((_finite(a)) && (_finite(b))) {
99 #endif
100 #endif
101 		if (a < b) {
102 			back = 1;
103 		}
104 #if DK4_HAVE_ISFINITE
105 	}
106 #else
107 #if	DK4_HAVE__FINITE
108 	}
109 #endif
110 #endif
111 	return back;
112 }
113 #endif
114 
115 
116 
117 #if	(!(DK4_HAVE_ISLESSEQUAL))
118 int
dk4ma_islessequal(double a,double b)119 dk4ma_islessequal(double a, double b)
120 {
121 	int		back = 0;
122 #if DK4_HAVE_ISFINITE
123 	if ((isfinite(a)) && (isfinite(b))) {
124 #else
125 #if	DK4_HAVE__FINITE
126 	if ((_finite(a)) && (_finite(b))) {
127 #endif
128 #endif
129 		if (a <= b) {
130 			back = 1;
131 		}
132 #if DK4_HAVE_ISFINITE
133 	}
134 #else
135 #if	DK4_HAVE__FINITE
136 	}
137 #endif
138 #endif
139 	return back;
140 }
141 #endif
142 
143 
144 
145 int
dk4ma_is_finite(double d)146 dk4ma_is_finite(double d)
147 {
148   int		 back	= 0;
149 #if _WIN32
150   back = ((0 != _finite(d)) ? 1 : 0);
151 #else
152   back = ((0 != isfinite(d)) ? 1 : 0);
153 #endif
154   return back;
155 }
156 
157 
158 
159 int
dk4ma_is_normal(double d)160 dk4ma_is_normal(double d)
161 {
162   int		 back = 0;
163 #if _WIN32
164   switch (_fpclass(d)) {
165     case _FPCLASS_NN : case _FPCLASS_NZ :
166     case _FPCLASS_PZ : case _FPCLASS_PN :
167     {
168       back = 1;
169     } break;
170   }
171 #else
172   back = ((0 != isnormal(d)) ? 1 : 0);
173 #endif
174   return back;
175 }
176 
177 
178 
179 /* vim: set ai sw=4 ts=4 : */
180