BALL
1.4.2
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
include
BALL
MATHS
MATHS/common.h
Go to the documentation of this file.
1
// -*- Mode: C++; tab-width: 2; -*-
2
// vi: set ts=2:
3
//
4
// $Id: common.h,v 1.29.16.1 2007/03/25 21:23:45 oliver Exp $
5
//
6
7
#ifndef BALL_MATHS_COMMON_H
8
#define BALL_MATHS_COMMON_H
9
10
#ifndef BALL_CONFIG_CONFIG_H
11
# include <BALL/CONFIG/config.h>
12
#endif
13
14
#include <cmath>
15
16
#ifdef BALL_HAS_IEEEFP_H
17
# include <ieeefp.h>
18
#endif
19
20
#ifdef BALL_HAS_FLOAT_H
21
# include <float.h>
22
#endif
23
24
#ifndef BALL_COMMON_CONSTANTS_H
25
# include <
BALL/COMMON/constants.h
>
26
#endif
27
28
#ifndef BALL_COMMON_GLOBAL_H
29
# include <
BALL/COMMON/global.h
>
30
#endif
31
32
#ifndef BALL_COMMON_MACROS_H
33
# include <
BALL/COMMON/macros.h
>
34
#endif
35
36
namespace
BALL
37
{
38
39
namespace
Maths
40
{
41
47
52
template
<
typename
T>
53
inline
54
T
abs
(
const
T& t)
55
{
56
return
BALL_ABS
(t);
57
}
58
63
template
<
typename
T>
64
inline
65
T
frac
(
const
T& t)
66
{
67
long
tmp = (long)t;
68
return
(t - (T)tmp);
69
}
70
71
#ifndef max
72
77
template
<
typename
T>
78
inline
79
T
max
(
const
T& a,
const
T& b)
80
{
81
return
BALL_MAX
(a, b);
82
}
83
90
template
<
typename
T>
91
inline
92
T
max
(
const
T& a,
const
T& b,
const
T &ct)
93
{
94
return
BALL_MAX3
(a, b, ct);
95
}
96
#endif
97
98
#ifndef min
99
104
template
<
typename
T>
105
inline
106
T
min
(
const
T& a,
const
T& b)
107
{
108
return
BALL_MIN
(a, b);
109
}
110
117
template
<
typename
T>
118
inline
119
T
min
(
const
T& a,
const
T& b,
const
T &ct)
120
{
121
return
BALL_MIN3
(a, b, ct);
122
}
123
#endif
124
129
template
<
typename
T>
130
inline
131
T
round
(
const
T& t)
132
{
133
return
(T)(t > 0 ? long(t + 0.5) : long(t - 0.5));
134
}
135
140
template
<
typename
T>
141
inline
142
T
sgn
(
const
T& t)
143
{
144
return
BALL_SGN
(t);
145
}
146
151
template
<
typename
T>
152
inline
153
bool
isFinite
(
const
T& t)
154
{
155
#ifdef BALL_COMPILER_MSVC
156
return ::_finite(t);
157
#else
158
return
finite(t);
159
#endif
160
}
161
166
template
<
typename
T>
167
inline
168
bool
isNan
(
const
T& t)
169
{
170
#ifdef BALL_COMPILER_MSVC
171
return
(_isnan(t) != 0);
172
#elif defined(BALL_OS_DARWIN)
173
return
( __inline_isnand(t) != 0);
174
#else
175
return
(isnan(t) != 0);
176
#endif
177
}
178
183
template
<
typename
T>
184
inline
185
bool
isInfinite
(
const
T& t)
186
{
187
return
(!
Maths::isFinite
(t) && !
Maths::isNan
(t));
188
}
189
194
template
<
typename
T>
195
inline
196
bool
isZero
(
const
T& t)
197
{
198
return
(
abs
(t) <
Constants::EPSILON
);
199
}
200
205
template
<
typename
T>
206
inline
207
bool
isNotZero
(
const
T& t)
208
{
209
return
(
abs
(t) >=
Constants::EPSILON
);
210
}
211
217
template
<
typename
T1,
typename
T2>
218
inline
219
bool
isEqual
(
const
T1& a,
const
T2& b)
220
{
221
return
(
abs
(a - b) <
Constants::EPSILON
);
222
}
223
229
template
<
typename
T1,
typename
T2>
230
inline
231
bool
isNotEqual
(
const
T1& a,
const
T2& b)
232
{
233
return
(
abs
(a - b) >=
Constants::EPSILON
);
234
}
235
241
template
<
typename
T1,
typename
T2>
242
inline
243
bool
isLess
(
const
T1& a,
const
T2& b)
244
245
{
246
return
((a - b) <= -
Constants::EPSILON
);
247
}
248
254
template
<
typename
T1,
typename
T2>
255
inline
256
bool
isLessOrEqual
(
const
T1& a,
const
T2& b)
257
{
258
return
((a - b) <
Constants::EPSILON
);
259
}
260
266
template
<
typename
T1,
typename
T2>
267
inline
268
bool
isGreaterOrEqual
(
const
T1& a,
const
T2& b)
269
{
270
return
((a - b) > -
Constants::EPSILON
);
271
}
272
278
template
<
typename
T1,
typename
T2>
279
inline
280
bool
isGreater
(
const
T1& a,
const
T2& b)
281
{
282
return
(a - b >=
Constants::EPSILON
);
283
}
284
289
template
<
typename
T>
290
inline
291
long
floor
(
const
T& t)
292
{
293
return
(
long
)(
Maths::isGreater
(t, 0) ? t: (
Maths::isEqual
(t, (T)(
long
)t) ? t : t - 1));
294
}
295
300
template
<
typename
T>
301
inline
302
long
ceiling
(
const
T& t)
303
{
304
return
(
long
)(
Maths::isLess
(t, 0) ? t: (
Maths::isEqual
(t, (T)(
long
)t) ? t : t + 1));
305
}
306
312
template
<
typename
T1,
typename
T2>
313
inline
314
Index
compare
(
const
T1& a,
const
T2& b)
315
{
316
return
(
Maths::isLess
(a, b) ? -1 :
Maths::isEqual
(a, b) ? 0 : 1);
317
}
318
325
template
<
typename
T>
326
inline
327
bool
isNear
(
const
T& a,
const
T& b,
const
T& max_diff)
328
{
329
return
(
abs
((
double
)a - (
double
)b) <
abs
((
double
)max_diff));
330
}
331
332
334
inline
double
rint
(
double
x)
335
{
336
if
(x < 0.0)
return
(
double
)(int)(x - 0.5);
337
else
return
(
double
)(int)(x + 0.5);
338
}
339
341
342
}
// namespace Maths
343
}
// namespace BALL
344
345
#endif // BALL_MATHS_COMMON_H
Generated by
1.8.3.1