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)25dk4ma_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)35dk4ma_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)63dk4ma_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)91dk4ma_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)119dk4ma_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)146dk4ma_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)160dk4ma_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