dune-common
2.2.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
dune
common
float_cmp.hh
Go to the documentation of this file.
1
#ifndef DUNE_COMMON_FLOAT_CMP_HH
2
#define DUNE_COMMON_FLOAT_CMP_HH
3
93
94
namespace
Dune {
97
namespace
FloatCmp {
98
// basic constants
101
enum
CmpStyle
{
103
relativeWeak
,
105
relativeStrong
,
107
absolute
,
109
defaultCmpStyle
=
relativeWeak
110
};
113
enum
RoundingStyle
{
115
towardZero
,
117
towardInf
,
119
downward
,
121
upward
,
123
defaultRoundingStyle
=
towardZero
124
};
125
126
template
<
class
T>
struct
EpsilonType;
127
129
134
template
<
class
T, CmpStyle style = defaultCmpStyle>
135
struct
DefaultEpsilon
{
137
static
typename
EpsilonType<T>::Type
value
();
138
};
139
140
// operations in functional style
141
144
146
153
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
154
bool
eq
(
const
T &first,
155
const
T &second,
156
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
158
166
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
167
bool
ne
(
const
T &first,
168
const
T &second,
169
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
171
182
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
183
bool
gt
(
const
T &first,
184
const
T &second,
185
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
187
198
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
199
bool
lt
(
const
T &first,
200
const
T &second,
201
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
203
214
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
215
bool
ge
(
const
T &first,
216
const
T &second,
217
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
219
230
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
231
bool
le
(
const
T &first,
232
const
T &second,
233
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
234
235
// rounding operations
237
250
template
<
class
I,
class
T,
CmpStyle
cstyle
/*= defaultCmpStyle*/
,
RoundingStyle
rstyle
/*= defaultRoundingStyle*/
>
251
I
round
(
const
T &val,
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, cstyle>::value
());
252
// truncation
254
267
template
<
class
I,
class
T,
CmpStyle
cstyle
/*= defaultCmpStyle*/
,
RoundingStyle
rstyle
/*= defaultRoundingStyle*/
>
268
I
trunc
(
const
T &val,
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, cstyle>::value
());
269
271
// group FloatCmp
272
}
//namespace FloatCmp
273
274
275
// oo interface
277
283
template
<
class
T,
FloatCmp::CmpStyle
cstyle_ =
FloatCmp::defaultCmpStyle
,
284
FloatCmp::RoundingStyle
rstyle_ =
FloatCmp::defaultRoundingStyle
>
285
class
FloatCmpOps
{
286
typedef
FloatCmp::CmpStyle
CmpStyle
;
287
typedef
FloatCmp::RoundingStyle
RoundingStyle
;
288
289
public
:
290
// record template parameters
292
static
const
CmpStyle
cstyle
= cstyle_;
294
static
const
RoundingStyle
rstyle
= rstyle_;
296
typedef
T
ValueType
;
298
301
typedef
typename
FloatCmp::EpsilonType<T>::Type
EpsilonType
;
302
303
private
:
304
EpsilonType
epsilon_;
305
306
typedef
FloatCmp::DefaultEpsilon<EpsilonType, cstyle>
DefaultEpsilon
;
307
308
public
:
310
313
FloatCmpOps
(
EpsilonType
epsilon
=
DefaultEpsilon::value
());
314
316
EpsilonType
epsilon
()
const
;
318
void
epsilon
(
EpsilonType
epsilon__);
319
321
bool
eq
(
const
ValueType
&first,
const
ValueType
&second)
const
;
323
326
bool
ne
(
const
ValueType
&first,
const
ValueType
&second)
const
;
328
332
bool
gt
(
const
ValueType
&first,
const
ValueType
&second)
const
;
334
338
bool
lt
(
const
ValueType
&first,
const
ValueType
&second)
const
;
340
344
bool
ge
(
const
ValueType
&first,
const
ValueType
&second)
const
;
346
350
bool
le
(
const
ValueType
&first,
const
ValueType
&second)
const
;
351
353
362
template
<
class
I>
363
I
round
(
const
ValueType
&val)
const
;
364
366
375
template
<
class
I>
376
I
trunc
(
const
ValueType
&val)
const
;
377
378
};
379
380
}
//namespace Dune
381
382
#include "
float_cmp.cc
"
383
384
#endif //DUNE_COMMON_FLOAT_CMP_HH
Generated on Mon Jun 4 2012 12:00:46 for dune-common by
1.8.1