blob: 7ce8d680b50cbe1f8e0c80b71e2d8a083219380c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/*@@
@file Math.c
@date 2012-10-17
@author Erik Schnetter
@desc
Miscellaneous math routines, providing fallback C
implementations for broken C++ compilers, and providing
dummy implementations for broken C compilers.
@enddesc
@@*/
#include <math.h>
#include <cctk_Config.h>
#include <cctk_Math.h>
double CCTK_copysign(double x, double y)
{
#ifdef HAVE_COPYSIGN
return copysign(x, y);
#else
return y >= 0.0 ? fabs(x) : -fabs(x);
#endif
}
double CCTK_FNAME(CCTK_copysign)(double *x, double *y);
double CCTK_FNAME(CCTK_copysign)(double *x, double *y)
{
return CCTK_copysign(*x, *y);
}
int CCTK_fpclassify(double x)
{
#ifdef HAVE_FPCLASSIFY
return fpclassify(x);
#else
return 0; /* don't know what else to return */
#endif
}
int CCTK_FNAME(CCTK_fpclassify)(double *x);
int CCTK_FNAME(CCTK_fpclassify)(double *x)
{
return CCTK_fpclassify(*x);
}
int CCTK_isfinite(double x)
{
#ifdef HAVE_ISFINITE
return isfinite(x);
#else
return 1; /* default */
#endif
}
int CCTK_FNAME(CCTK_isfinite)(double *x);
int CCTK_FNAME(CCTK_isfinite)(double *x)
{
return CCTK_isfinite(*x);
}
int CCTK_isinf(double x)
{
#ifdef HAVE_ISINF
return isinf(x);
#else
return 0; /* default */
#endif
}
int CCTK_FNAME(CCTK_isinf)(double *x);
int CCTK_FNAME(CCTK_isinf)(double *x)
{
return CCTK_isinf(*x);
}
int CCTK_isnan(double x)
{
#ifdef HAVE_ISNAN
return isnan(x);
#else
return 0; /* default */
#endif
}
int CCTK_FNAME(CCTK_isnan)(double *x);
int CCTK_FNAME(CCTK_isnan)(double *x)
{
return CCTK_isnan(*x);
}
int CCTK_isnormal(double x)
{
#ifdef HAVE_ISNORMAL
return isnormal(x);
#else
return 1; /* default */
#endif
}
int CCTK_FNAME(CCTK_isnormal)(double *x);
int CCTK_FNAME(CCTK_isnormal)(double *x)
{
return CCTK_isnormal(*x);
}
int CCTK_signbit(double x)
{
#ifdef HAVE_SIGNBIT
return signbit(x);
#else
return x < 0.0;
#endif
}
int CCTK_FNAME(CCTK_signbit)(double *x);
int CCTK_FNAME(CCTK_signbit)(double *x)
{
return CCTK_signbit(*x);
}
|