dune-common
2.3.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
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2
// vi: set et ts=4 sw=2 sts=2:
3
#ifndef DUNE_COMMON_FLOAT_CMP_HH
4
#define DUNE_COMMON_FLOAT_CMP_HH
5
95
96
namespace
Dune {
99
namespace
FloatCmp {
100
// basic constants
103
enum
CmpStyle
{
105
relativeWeak
,
107
relativeStrong
,
109
absolute
,
111
defaultCmpStyle
=
relativeWeak
112
};
115
enum
RoundingStyle
{
117
towardZero
,
119
towardInf
,
121
downward
,
123
upward
,
125
defaultRoundingStyle
=
towardZero
126
};
127
128
template
<
class
T>
struct
EpsilonType;
129
131
136
template
<
class
T, CmpStyle style = defaultCmpStyle>
137
struct
DefaultEpsilon
{
139
static
typename
EpsilonType<T>::Type
value
();
140
};
141
142
// operations in functional style
143
146
148
155
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
156
bool
eq
(
const
T &first,
157
const
T &second,
158
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
160
168
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
169
bool
ne
(
const
T &first,
170
const
T &second,
171
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
173
184
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
185
bool
gt
(
const
T &first,
186
const
T &second,
187
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
189
200
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
201
bool
lt
(
const
T &first,
202
const
T &second,
203
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
205
216
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
217
bool
ge
(
const
T &first,
218
const
T &second,
219
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
221
232
template
<
class
T,
CmpStyle
style
/*= defaultCmpStyle*/
>
233
bool
le
(
const
T &first,
234
const
T &second,
235
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, style>::value
());
236
237
// rounding operations
239
252
template
<
class
I,
class
T,
CmpStyle
cstyle
/*= defaultCmpStyle*/
,
RoundingStyle
rstyle
/*= defaultRoundingStyle*/
>
253
I
round
(
const
T &val,
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, cstyle>::value
());
254
// truncation
256
269
template
<
class
I,
class
T,
CmpStyle
cstyle
/*= defaultCmpStyle*/
,
RoundingStyle
rstyle
/*= defaultRoundingStyle*/
>
270
I
trunc
(
const
T &val,
typename
EpsilonType<T>::Type
epsilon =
DefaultEpsilon<T, cstyle>::value
());
271
273
// group FloatCmp
274
}
//namespace FloatCmp
275
276
277
// oo interface
279
285
template
<
class
T,
FloatCmp::CmpStyle
cstyle_ =
FloatCmp::defaultCmpStyle
,
286
FloatCmp::RoundingStyle
rstyle_ =
FloatCmp::defaultRoundingStyle
>
287
class
FloatCmpOps
{
288
typedef
FloatCmp::CmpStyle
CmpStyle
;
289
typedef
FloatCmp::RoundingStyle
RoundingStyle
;
290
291
public
:
292
// record template parameters
294
static
const
CmpStyle
cstyle
= cstyle_;
296
static
const
RoundingStyle
rstyle
= rstyle_;
298
typedef
T
ValueType
;
300
303
typedef
typename
FloatCmp::EpsilonType<T>::Type
EpsilonType
;
304
305
private
:
306
EpsilonType
epsilon_;
307
308
typedef
FloatCmp::DefaultEpsilon<EpsilonType, cstyle>
DefaultEpsilon
;
309
310
public
:
312
315
FloatCmpOps
(
EpsilonType
epsilon
=
DefaultEpsilon::value
());
316
318
EpsilonType
epsilon
()
const
;
320
void
epsilon
(
EpsilonType
epsilon__);
321
323
bool
eq
(
const
ValueType
&first,
const
ValueType
&second)
const
;
325
328
bool
ne
(
const
ValueType
&first,
const
ValueType
&second)
const
;
330
334
bool
gt
(
const
ValueType
&first,
const
ValueType
&second)
const
;
336
340
bool
lt
(
const
ValueType
&first,
const
ValueType
&second)
const
;
342
346
bool
ge
(
const
ValueType
&first,
const
ValueType
&second)
const
;
348
352
bool
le
(
const
ValueType
&first,
const
ValueType
&second)
const
;
353
355
364
template
<
class
I>
365
I
round
(
const
ValueType
&val)
const
;
366
368
377
template
<
class
I>
378
I
trunc
(
const
ValueType
&val)
const
;
379
380
};
381
382
}
//namespace Dune
383
384
#include "
float_cmp.cc
"
385
386
#endif //DUNE_COMMON_FLOAT_CMP_HH
Generated on Mon Feb 10 2014 23:52:38 for dune-common by
1.8.1.2