p1788 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +8 -0
- data/AUTHORS +6 -0
- data/LICENSE +201 -0
- data/NOTICE +29 -0
- data/README.md +65 -0
- data/ext/libieeep1788_copy/README +3 -0
- data/ext/libieeep1788_copy/p1788/AUTHORS +16 -0
- data/ext/libieeep1788_copy/p1788/LICENSE +202 -0
- data/ext/libieeep1788_copy/p1788/NOTICE +14 -0
- data/ext/libieeep1788_copy/p1788/decoration/decoration.hpp +265 -0
- data/ext/libieeep1788_copy/p1788/exception/exception.hpp +302 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor.hpp +3443 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_bool_func_impl.hpp +608 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_cancel_func_impl.hpp +229 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_class_impl.hpp +526 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_elem_func_impl.hpp +4533 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_io_impl.hpp +1421 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_mul_rev_to_pair_func_impl.hpp +347 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_num_func_impl.hpp +655 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_rec_bool_func_impl.hpp +146 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_rec_overlap_impl.hpp +188 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_rev_func_impl.hpp +1674 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_set_op_impl.hpp +216 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_setup_func_impl.hpp +68 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_util_func_impl.hpp +135 -0
- data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_validation_func_impl.hpp +93 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval.hpp +1529 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_bool_func_impl.hpp +481 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_cancel_func_impl.hpp +126 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_elem_func_impl.hpp +1581 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_io_impl.hpp +59 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_mul_rev_to_pair_func_impl.hpp +88 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_num_func_impl.hpp +345 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_rec_bool_func_impl.hpp +92 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_rec_overlap_impl.hpp +72 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_rev_func_impl.hpp +656 -0
- data/ext/libieeep1788_copy/p1788/infsup/base_interval_set_op_impl.hpp +126 -0
- data/ext/libieeep1788_copy/p1788/infsup/decorated_interval.hpp +464 -0
- data/ext/libieeep1788_copy/p1788/infsup/forward_declaration.hpp +66 -0
- data/ext/libieeep1788_copy/p1788/infsup/interval.hpp +275 -0
- data/ext/libieeep1788_copy/p1788/io/io_manip.hpp +531 -0
- data/ext/libieeep1788_copy/p1788/overlapping/overlapping.hpp +241 -0
- data/ext/libieeep1788_copy/p1788/p1788.hpp +45 -0
- data/ext/libieeep1788_copy/p1788/reduction/reduction.hpp +341 -0
- data/ext/libieeep1788_copy/p1788/util/io.hpp +63 -0
- data/ext/libieeep1788_copy/p1788/util/mixed_type_traits.hpp +140 -0
- data/ext/libieeep1788_copy/p1788/util/mpfr_util.hpp +77 -0
- data/ext/libieeep1788_copy/p1788/util/mpfr_var.hpp +119 -0
- data/ext/libieeep1788_copy/p1788/util/mpfr_var_impl.hpp +382 -0
- data/ext/libieeep1788_copy/p1788/version.hpp +34 -0
- data/ext/p1788/extconf.rb +49 -0
- data/ext/p1788/p1788.cc +3764 -0
- data/lib/p1788/version.rb +4 -0
- data/lib/p1788.rb +25 -0
- data/p1788.gemspec +72 -0
- metadata +99 -0
@@ -0,0 +1,1529 @@
|
|
1
|
+
//
|
2
|
+
// libieeep1788
|
3
|
+
//
|
4
|
+
// An implementation of the preliminary IEEE P1788 standard for
|
5
|
+
// interval arithmetic
|
6
|
+
//
|
7
|
+
//
|
8
|
+
// Copyright 2013 - 2015
|
9
|
+
//
|
10
|
+
// Marco Nehmeier (nehmeier@informatik.uni-wuerzburg.de)
|
11
|
+
// Department of Computer Science,
|
12
|
+
// University of Wuerzburg, Germany
|
13
|
+
//
|
14
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
15
|
+
// you may not use this file except in compliance with the License.
|
16
|
+
// You may obtain a copy of the License at
|
17
|
+
//
|
18
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
19
|
+
//
|
20
|
+
// Unless required by applicable law or agreed to in writing, software
|
21
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
22
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
23
|
+
// See the License for the specific language governing permissions and
|
24
|
+
// limitations under the License.
|
25
|
+
|
26
|
+
#ifndef LIBIEEEP1788_P1788_INFSUP_BASE_INTERVAL_HPP
|
27
|
+
#define LIBIEEEP1788_P1788_INFSUP_BASE_INTERVAL_HPP
|
28
|
+
|
29
|
+
|
30
|
+
#include "p1788/infsup/forward_declaration.hpp"
|
31
|
+
#include "p1788/overlapping/overlapping.hpp"
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
//------------------------------------------------------------------------------
|
36
|
+
//------------------------------------------------------------------------------
|
37
|
+
// Definition of class base_interval
|
38
|
+
//------------------------------------------------------------------------------
|
39
|
+
//------------------------------------------------------------------------------
|
40
|
+
|
41
|
+
|
42
|
+
namespace p1788
|
43
|
+
{
|
44
|
+
|
45
|
+
namespace infsup
|
46
|
+
{
|
47
|
+
|
48
|
+
|
49
|
+
/// \brief Base class for an infsup interval
|
50
|
+
///
|
51
|
+
///
|
52
|
+
/// Base class representing an infsup interval
|
53
|
+
///
|
54
|
+
/// This class only serves as a uniform interface/representation of an
|
55
|
+
/// interval. All the behavior will be specified by the template policy class
|
56
|
+
/// <c>Flavor<T></c> which implements the flavors concept of the standard in coherent way.
|
57
|
+
///
|
58
|
+
/// \tparam T Number system / parent format
|
59
|
+
/// \tparam Flavor<typename> Generic flavor which will be instantiated with the
|
60
|
+
/// number system T
|
61
|
+
/// \tparam RepType Type of the internal representation
|
62
|
+
/// \tparam ConcreteInterval Type of the concrete interval type (sub class)
|
63
|
+
///
|
64
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
65
|
+
class base_interval
|
66
|
+
{
|
67
|
+
public:
|
68
|
+
|
69
|
+
// typedefs
|
70
|
+
typedef T bound_type;
|
71
|
+
|
72
|
+
typedef Flavor<T> flavor_type;
|
73
|
+
|
74
|
+
typedef RepType representation_type; // Type for the internal representation
|
75
|
+
|
76
|
+
|
77
|
+
protected:
|
78
|
+
|
79
|
+
// Constructor used by the derived classes
|
80
|
+
inline
|
81
|
+
explicit base_interval(representation_type const& rep) : rep_(rep)
|
82
|
+
{ }
|
83
|
+
|
84
|
+
// function to create an instance of a derived class
|
85
|
+
inline
|
86
|
+
static ConcreteInterval concrete_interval(representation_type rep)
|
87
|
+
{
|
88
|
+
return ConcreteInterval(rep);
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
// internal representation
|
94
|
+
representation_type rep_;
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
// Friends
|
100
|
+
|
101
|
+
template<typename, template<typename> class, typename, class>
|
102
|
+
friend class base_interval;
|
103
|
+
|
104
|
+
template<typename, template<typename> class>
|
105
|
+
friend class interval;
|
106
|
+
|
107
|
+
template<typename, template<typename> class>
|
108
|
+
friend class decorated_interval;
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
//------------------------------------------------------------------------------
|
115
|
+
//------------------------------------------------------------------------------
|
116
|
+
// Operations on intervals
|
117
|
+
//------------------------------------------------------------------------------
|
118
|
+
//------------------------------------------------------------------------------
|
119
|
+
|
120
|
+
public:
|
121
|
+
|
122
|
+
|
123
|
+
// -----------------------------------------------------------------------------
|
124
|
+
// IO operators
|
125
|
+
// -----------------------------------------------------------------------------
|
126
|
+
|
127
|
+
template<typename T_, template<typename> class Flavor_, typename RepType_, class ConcreteInterval_, typename CharT, typename Traits>
|
128
|
+
friend std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>&, base_interval<T_, Flavor_, RepType_, ConcreteInterval_> const&);
|
129
|
+
|
130
|
+
template<typename T_, template<typename> class Flavor_, typename RepType_, class ConcreteInterval_, typename CharT, typename Traits>
|
131
|
+
friend std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>&, base_interval<T_, Flavor_, RepType_, ConcreteInterval_>&);
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
// -----------------------------------------------------------------------------
|
138
|
+
// Boolean functions on intervals
|
139
|
+
// -----------------------------------------------------------------------------
|
140
|
+
|
141
|
+
///@name Boolean functions on intervals
|
142
|
+
///
|
143
|
+
///
|
144
|
+
///@{
|
145
|
+
|
146
|
+
|
147
|
+
inline
|
148
|
+
static bool is_empty(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
149
|
+
|
150
|
+
|
151
|
+
inline
|
152
|
+
static bool is_entire(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
153
|
+
|
154
|
+
|
155
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
156
|
+
inline
|
157
|
+
static bool equal(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
158
|
+
|
159
|
+
|
160
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
161
|
+
inline
|
162
|
+
static bool subset(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
163
|
+
|
164
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
165
|
+
inline
|
166
|
+
static bool superset(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
167
|
+
|
168
|
+
|
169
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
170
|
+
inline
|
171
|
+
static bool less(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
172
|
+
|
173
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
174
|
+
inline
|
175
|
+
static bool greater(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
176
|
+
|
177
|
+
|
178
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
179
|
+
inline
|
180
|
+
static bool precedes(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
181
|
+
|
182
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
183
|
+
inline
|
184
|
+
static bool succeeds(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
185
|
+
|
186
|
+
|
187
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
188
|
+
inline
|
189
|
+
static bool interior(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
190
|
+
|
191
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
192
|
+
inline
|
193
|
+
static bool contains_interior(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
194
|
+
|
195
|
+
|
196
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
197
|
+
inline
|
198
|
+
static bool strictly_less(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
199
|
+
|
200
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
201
|
+
inline
|
202
|
+
static bool strictly_greater(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
203
|
+
|
204
|
+
|
205
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
206
|
+
inline
|
207
|
+
static bool strictly_precedes(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
208
|
+
|
209
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
210
|
+
inline
|
211
|
+
static bool strictly_succeeds(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
212
|
+
|
213
|
+
|
214
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
215
|
+
inline
|
216
|
+
static bool disjoint(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
217
|
+
|
218
|
+
|
219
|
+
///@}
|
220
|
+
|
221
|
+
|
222
|
+
// -----------------------------------------------------------------------------
|
223
|
+
// Recommended boolean functions on intervals
|
224
|
+
// -----------------------------------------------------------------------------
|
225
|
+
|
226
|
+
///@name Recommended boolean functions on intervals
|
227
|
+
///
|
228
|
+
///
|
229
|
+
///@{
|
230
|
+
|
231
|
+
inline
|
232
|
+
static bool is_common_interval(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
233
|
+
|
234
|
+
inline
|
235
|
+
static bool is_singleton(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
236
|
+
|
237
|
+
template<typename T_>
|
238
|
+
inline
|
239
|
+
static bool is_member(T_ m, base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
240
|
+
|
241
|
+
///@}
|
242
|
+
|
243
|
+
|
244
|
+
// -----------------------------------------------------------------------------
|
245
|
+
// Numeric functions on intervals
|
246
|
+
// -----------------------------------------------------------------------------
|
247
|
+
|
248
|
+
///@name Numeric functions on intervals
|
249
|
+
///
|
250
|
+
///
|
251
|
+
///@{
|
252
|
+
|
253
|
+
inline
|
254
|
+
static T inf(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
255
|
+
|
256
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
257
|
+
inline
|
258
|
+
static T inf(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
259
|
+
|
260
|
+
|
261
|
+
inline
|
262
|
+
static T sup(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
263
|
+
|
264
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
265
|
+
inline
|
266
|
+
static T sup(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
267
|
+
|
268
|
+
|
269
|
+
inline
|
270
|
+
static T mid(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
271
|
+
|
272
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
273
|
+
inline
|
274
|
+
static T mid(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
275
|
+
|
276
|
+
|
277
|
+
inline
|
278
|
+
static T rad(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
279
|
+
|
280
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
281
|
+
inline
|
282
|
+
static T rad(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
283
|
+
|
284
|
+
|
285
|
+
inline
|
286
|
+
static std::pair<T,T> mid_rad(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
287
|
+
|
288
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
289
|
+
inline
|
290
|
+
static std::pair<T,T> mid_rad(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
291
|
+
|
292
|
+
|
293
|
+
inline
|
294
|
+
static T wid(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
295
|
+
|
296
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
297
|
+
inline
|
298
|
+
static T wid(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
299
|
+
|
300
|
+
|
301
|
+
inline
|
302
|
+
static T mag(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
303
|
+
|
304
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
305
|
+
inline
|
306
|
+
static T mag(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
307
|
+
|
308
|
+
|
309
|
+
inline
|
310
|
+
static T mig(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
311
|
+
|
312
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
313
|
+
inline
|
314
|
+
static T mig(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
315
|
+
|
316
|
+
///@}
|
317
|
+
|
318
|
+
|
319
|
+
|
320
|
+
|
321
|
+
// -----------------------------------------------------------------------------
|
322
|
+
// Non-arithmetic set operations
|
323
|
+
// -----------------------------------------------------------------------------
|
324
|
+
|
325
|
+
///@name Set operations
|
326
|
+
///
|
327
|
+
///
|
328
|
+
///@{
|
329
|
+
|
330
|
+
|
331
|
+
inline
|
332
|
+
static ConcreteInterval intersection(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
333
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
334
|
+
|
335
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
336
|
+
inline
|
337
|
+
static ConcreteInterval intersection(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
338
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
339
|
+
|
340
|
+
inline
|
341
|
+
static ConcreteInterval convex_hull(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
342
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
343
|
+
|
344
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
345
|
+
inline
|
346
|
+
static ConcreteInterval convex_hull(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
347
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
348
|
+
|
349
|
+
///@}
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
|
354
|
+
// -----------------------------------------------------------------------------
|
355
|
+
// Forward elementary functions
|
356
|
+
// -----------------------------------------------------------------------------
|
357
|
+
|
358
|
+
///@name Forward elementary functions
|
359
|
+
///
|
360
|
+
///
|
361
|
+
///@{
|
362
|
+
|
363
|
+
inline
|
364
|
+
static ConcreteInterval pos(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
365
|
+
|
366
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
367
|
+
inline
|
368
|
+
static ConcreteInterval pos(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
369
|
+
|
370
|
+
|
371
|
+
inline
|
372
|
+
static ConcreteInterval neg(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
373
|
+
|
374
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
375
|
+
inline
|
376
|
+
static ConcreteInterval neg(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
377
|
+
|
378
|
+
|
379
|
+
inline
|
380
|
+
static ConcreteInterval add(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
381
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
382
|
+
|
383
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
384
|
+
inline
|
385
|
+
static ConcreteInterval add(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
386
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
387
|
+
|
388
|
+
|
389
|
+
inline
|
390
|
+
static ConcreteInterval sub(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
391
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
392
|
+
|
393
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
394
|
+
inline
|
395
|
+
static ConcreteInterval sub(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
396
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
397
|
+
|
398
|
+
|
399
|
+
inline
|
400
|
+
static ConcreteInterval mul(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
401
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
402
|
+
|
403
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
404
|
+
inline
|
405
|
+
static ConcreteInterval mul(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
406
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
407
|
+
|
408
|
+
|
409
|
+
inline
|
410
|
+
static ConcreteInterval div(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
411
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
412
|
+
|
413
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
414
|
+
inline
|
415
|
+
static ConcreteInterval div(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
416
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
417
|
+
|
418
|
+
|
419
|
+
inline
|
420
|
+
static ConcreteInterval recip(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
421
|
+
|
422
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
423
|
+
inline
|
424
|
+
static ConcreteInterval recip(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
425
|
+
|
426
|
+
|
427
|
+
inline
|
428
|
+
static ConcreteInterval sqr(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
429
|
+
|
430
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
431
|
+
inline
|
432
|
+
static ConcreteInterval sqr(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
433
|
+
|
434
|
+
|
435
|
+
inline
|
436
|
+
static ConcreteInterval sqrt(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
437
|
+
|
438
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
439
|
+
inline
|
440
|
+
static ConcreteInterval sqrt(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
441
|
+
|
442
|
+
|
443
|
+
inline
|
444
|
+
static ConcreteInterval fma(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
445
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y,
|
446
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& z);
|
447
|
+
|
448
|
+
template<typename T1, typename RepType1, class ConcreteInterval1,
|
449
|
+
typename T2, typename RepType2, class ConcreteInterval2,
|
450
|
+
typename T3, typename RepType3, class ConcreteInterval3>
|
451
|
+
inline
|
452
|
+
static ConcreteInterval fma(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
453
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y,
|
454
|
+
base_interval<T3, Flavor, RepType3, ConcreteInterval3> const& z);
|
455
|
+
|
456
|
+
|
457
|
+
inline
|
458
|
+
static ConcreteInterval pown(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, int p);
|
459
|
+
|
460
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
461
|
+
inline
|
462
|
+
static ConcreteInterval pown(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x, int p);
|
463
|
+
|
464
|
+
|
465
|
+
inline
|
466
|
+
static ConcreteInterval pow(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
467
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
468
|
+
|
469
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
470
|
+
inline
|
471
|
+
static ConcreteInterval pow(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
472
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
473
|
+
|
474
|
+
|
475
|
+
inline
|
476
|
+
static ConcreteInterval exp(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
477
|
+
|
478
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
479
|
+
inline
|
480
|
+
static ConcreteInterval exp(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
481
|
+
|
482
|
+
|
483
|
+
inline
|
484
|
+
static ConcreteInterval exp2(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
485
|
+
|
486
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
487
|
+
inline
|
488
|
+
static ConcreteInterval exp2(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
489
|
+
|
490
|
+
|
491
|
+
inline
|
492
|
+
static ConcreteInterval exp10(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
493
|
+
|
494
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
495
|
+
inline
|
496
|
+
static ConcreteInterval exp10(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
497
|
+
|
498
|
+
|
499
|
+
inline
|
500
|
+
static ConcreteInterval log(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
501
|
+
|
502
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
503
|
+
inline
|
504
|
+
static ConcreteInterval log(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
505
|
+
|
506
|
+
|
507
|
+
inline
|
508
|
+
static ConcreteInterval log2(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
509
|
+
|
510
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
511
|
+
inline
|
512
|
+
static ConcreteInterval log2(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
513
|
+
|
514
|
+
|
515
|
+
inline
|
516
|
+
static ConcreteInterval log10(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
517
|
+
|
518
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
519
|
+
inline
|
520
|
+
static ConcreteInterval log10(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
521
|
+
|
522
|
+
|
523
|
+
inline
|
524
|
+
static ConcreteInterval sin(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
525
|
+
|
526
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
527
|
+
inline
|
528
|
+
static ConcreteInterval sin(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
529
|
+
|
530
|
+
|
531
|
+
inline
|
532
|
+
static ConcreteInterval cos(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
533
|
+
|
534
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
535
|
+
inline
|
536
|
+
static ConcreteInterval cos(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
537
|
+
|
538
|
+
|
539
|
+
inline
|
540
|
+
static ConcreteInterval tan(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
541
|
+
|
542
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
543
|
+
inline
|
544
|
+
static ConcreteInterval tan(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
545
|
+
|
546
|
+
|
547
|
+
inline
|
548
|
+
static ConcreteInterval asin(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
549
|
+
|
550
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
551
|
+
inline
|
552
|
+
static ConcreteInterval asin(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
553
|
+
|
554
|
+
|
555
|
+
inline
|
556
|
+
static ConcreteInterval acos(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
557
|
+
|
558
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
559
|
+
inline
|
560
|
+
static ConcreteInterval acos(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
561
|
+
|
562
|
+
|
563
|
+
inline
|
564
|
+
static ConcreteInterval atan(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
565
|
+
|
566
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
567
|
+
inline
|
568
|
+
static ConcreteInterval atan(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
569
|
+
|
570
|
+
|
571
|
+
inline
|
572
|
+
static ConcreteInterval atan2(base_interval<T, Flavor, RepType, ConcreteInterval> const& y,
|
573
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
574
|
+
|
575
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
576
|
+
inline
|
577
|
+
static ConcreteInterval atan2(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& y,
|
578
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& x);
|
579
|
+
|
580
|
+
inline
|
581
|
+
static ConcreteInterval sinh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
582
|
+
|
583
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
584
|
+
inline
|
585
|
+
static ConcreteInterval sinh(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
586
|
+
|
587
|
+
|
588
|
+
inline
|
589
|
+
static ConcreteInterval cosh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
590
|
+
|
591
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
592
|
+
inline
|
593
|
+
static ConcreteInterval cosh(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
594
|
+
|
595
|
+
|
596
|
+
inline
|
597
|
+
static ConcreteInterval tanh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
598
|
+
|
599
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
600
|
+
inline
|
601
|
+
static ConcreteInterval tanh(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
602
|
+
|
603
|
+
|
604
|
+
inline
|
605
|
+
static ConcreteInterval asinh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
606
|
+
|
607
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
608
|
+
inline
|
609
|
+
static ConcreteInterval asinh(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
610
|
+
|
611
|
+
|
612
|
+
inline
|
613
|
+
static ConcreteInterval acosh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
614
|
+
|
615
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
616
|
+
inline
|
617
|
+
static ConcreteInterval acosh(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
618
|
+
|
619
|
+
|
620
|
+
inline
|
621
|
+
static ConcreteInterval atanh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
622
|
+
|
623
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
624
|
+
inline
|
625
|
+
static ConcreteInterval atanh(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
626
|
+
|
627
|
+
|
628
|
+
inline
|
629
|
+
static ConcreteInterval sign(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
630
|
+
|
631
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
632
|
+
inline
|
633
|
+
static ConcreteInterval sign(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
634
|
+
|
635
|
+
|
636
|
+
inline
|
637
|
+
static ConcreteInterval ceil(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
638
|
+
|
639
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
640
|
+
inline
|
641
|
+
static ConcreteInterval ceil(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
642
|
+
|
643
|
+
|
644
|
+
inline
|
645
|
+
static ConcreteInterval floor(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
646
|
+
|
647
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
648
|
+
inline
|
649
|
+
static ConcreteInterval floor(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
650
|
+
|
651
|
+
|
652
|
+
inline
|
653
|
+
static ConcreteInterval trunc(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
654
|
+
|
655
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
656
|
+
inline
|
657
|
+
static ConcreteInterval trunc(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
658
|
+
|
659
|
+
|
660
|
+
inline
|
661
|
+
static ConcreteInterval round_ties_to_even(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
662
|
+
|
663
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
664
|
+
inline
|
665
|
+
static ConcreteInterval round_ties_to_even(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
666
|
+
|
667
|
+
|
668
|
+
inline
|
669
|
+
static ConcreteInterval round_ties_to_away(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
670
|
+
|
671
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
672
|
+
inline
|
673
|
+
static ConcreteInterval round_ties_to_away(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
674
|
+
|
675
|
+
|
676
|
+
inline
|
677
|
+
static ConcreteInterval abs(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
678
|
+
|
679
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
680
|
+
inline
|
681
|
+
static ConcreteInterval abs(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& x);
|
682
|
+
|
683
|
+
|
684
|
+
inline
|
685
|
+
static ConcreteInterval min(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
686
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
687
|
+
|
688
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
689
|
+
inline
|
690
|
+
static ConcreteInterval min(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
691
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
692
|
+
|
693
|
+
|
694
|
+
inline
|
695
|
+
static ConcreteInterval max(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
696
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
697
|
+
|
698
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
699
|
+
inline
|
700
|
+
static ConcreteInterval max(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
701
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
702
|
+
|
703
|
+
|
704
|
+
///@}
|
705
|
+
|
706
|
+
|
707
|
+
// -----------------------------------------------------------------------------
|
708
|
+
// Cancellative addition and subtraction
|
709
|
+
// -----------------------------------------------------------------------------
|
710
|
+
|
711
|
+
///@name Cancellative addition and subtraction
|
712
|
+
///
|
713
|
+
///
|
714
|
+
///@{
|
715
|
+
|
716
|
+
inline
|
717
|
+
static ConcreteInterval cancel_plus(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
718
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
719
|
+
|
720
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
721
|
+
inline
|
722
|
+
static ConcreteInterval cancel_plus(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
723
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
724
|
+
|
725
|
+
inline
|
726
|
+
static ConcreteInterval cancel_minus(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
727
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
728
|
+
|
729
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
730
|
+
inline
|
731
|
+
static ConcreteInterval cancel_minus(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x,
|
732
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
733
|
+
|
734
|
+
|
735
|
+
///@}
|
736
|
+
|
737
|
+
|
738
|
+
// -----------------------------------------------------------------------------
|
739
|
+
// Two-output division
|
740
|
+
// -----------------------------------------------------------------------------
|
741
|
+
|
742
|
+
///@name Two-output division
|
743
|
+
///
|
744
|
+
///
|
745
|
+
///@{
|
746
|
+
|
747
|
+
inline
|
748
|
+
static std::pair<ConcreteInterval, ConcreteInterval>
|
749
|
+
mul_rev_to_pair(base_interval<T, Flavor, RepType, ConcreteInterval> const& b,
|
750
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
751
|
+
|
752
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
753
|
+
inline
|
754
|
+
static std::pair<ConcreteInterval, ConcreteInterval>
|
755
|
+
mul_rev_to_pair(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& b,
|
756
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& c);
|
757
|
+
|
758
|
+
|
759
|
+
///@}
|
760
|
+
|
761
|
+
|
762
|
+
// -----------------------------------------------------------------------------
|
763
|
+
// Reverse elementary functions
|
764
|
+
// -----------------------------------------------------------------------------
|
765
|
+
|
766
|
+
///@name Reverse elementary functions
|
767
|
+
///
|
768
|
+
///
|
769
|
+
///@{
|
770
|
+
|
771
|
+
inline
|
772
|
+
static ConcreteInterval sqr_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
773
|
+
|
774
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
775
|
+
inline
|
776
|
+
static ConcreteInterval sqr_rev(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& c);
|
777
|
+
|
778
|
+
inline
|
779
|
+
static ConcreteInterval sqr_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
780
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
781
|
+
|
782
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
783
|
+
inline
|
784
|
+
static ConcreteInterval sqr_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& c,
|
785
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& x);
|
786
|
+
|
787
|
+
|
788
|
+
inline
|
789
|
+
static ConcreteInterval abs_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
790
|
+
|
791
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
792
|
+
inline
|
793
|
+
static ConcreteInterval abs_rev(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& c);
|
794
|
+
|
795
|
+
inline
|
796
|
+
static ConcreteInterval abs_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
797
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
798
|
+
|
799
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
800
|
+
inline
|
801
|
+
static ConcreteInterval abs_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& c,
|
802
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& x);
|
803
|
+
|
804
|
+
|
805
|
+
inline
|
806
|
+
static ConcreteInterval pown_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c, int p);
|
807
|
+
|
808
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
809
|
+
inline
|
810
|
+
static ConcreteInterval pown_rev(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& c, int p);
|
811
|
+
|
812
|
+
inline
|
813
|
+
static ConcreteInterval pown_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
814
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
815
|
+
int p);
|
816
|
+
|
817
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
818
|
+
inline
|
819
|
+
static ConcreteInterval pown_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& c,
|
820
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& x,
|
821
|
+
int p);
|
822
|
+
|
823
|
+
inline
|
824
|
+
static ConcreteInterval sin_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
825
|
+
|
826
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
827
|
+
inline
|
828
|
+
static ConcreteInterval sin_rev(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& c);
|
829
|
+
|
830
|
+
inline
|
831
|
+
static ConcreteInterval sin_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
832
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
833
|
+
|
834
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
835
|
+
inline
|
836
|
+
static ConcreteInterval sin_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& c,
|
837
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& x);
|
838
|
+
|
839
|
+
|
840
|
+
inline
|
841
|
+
static ConcreteInterval cos_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
842
|
+
|
843
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
844
|
+
inline
|
845
|
+
static ConcreteInterval cos_rev(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& c);
|
846
|
+
|
847
|
+
inline
|
848
|
+
static ConcreteInterval cos_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
849
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
850
|
+
|
851
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
852
|
+
inline
|
853
|
+
static ConcreteInterval cos_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& c,
|
854
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& x);
|
855
|
+
|
856
|
+
|
857
|
+
inline
|
858
|
+
static ConcreteInterval tan_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
859
|
+
|
860
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
861
|
+
inline
|
862
|
+
static ConcreteInterval tan_rev(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& c);
|
863
|
+
|
864
|
+
inline
|
865
|
+
static ConcreteInterval tan_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
866
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
867
|
+
|
868
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
869
|
+
inline
|
870
|
+
static ConcreteInterval tan_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& c,
|
871
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& x);
|
872
|
+
|
873
|
+
|
874
|
+
inline
|
875
|
+
static ConcreteInterval cosh_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
876
|
+
|
877
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
878
|
+
inline
|
879
|
+
static ConcreteInterval cosh_rev(base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& c);
|
880
|
+
|
881
|
+
inline
|
882
|
+
static ConcreteInterval cosh_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
883
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
884
|
+
|
885
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
886
|
+
inline
|
887
|
+
static ConcreteInterval cosh_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& c,
|
888
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& x);
|
889
|
+
|
890
|
+
|
891
|
+
inline
|
892
|
+
static ConcreteInterval mul_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& b,
|
893
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
894
|
+
|
895
|
+
template<typename T1, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
896
|
+
inline
|
897
|
+
static ConcreteInterval mul_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& b,
|
898
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& c);
|
899
|
+
|
900
|
+
inline
|
901
|
+
static ConcreteInterval mul_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& b,
|
902
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
903
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
904
|
+
|
905
|
+
template<typename T1, typename RepType1, class ConcreteInterval1,
|
906
|
+
typename T2, typename RepType2, class ConcreteInterval2,
|
907
|
+
typename T3, typename RepType3, class ConcreteInterval3>
|
908
|
+
inline
|
909
|
+
static ConcreteInterval mul_rev(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& b,
|
910
|
+
base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& c,
|
911
|
+
base_interval<T3, Flavor, RepType3, ConcreteInterval3> const& x);
|
912
|
+
|
913
|
+
///@}
|
914
|
+
|
915
|
+
|
916
|
+
// -----------------------------------------------------------------------------
|
917
|
+
// Extended interval comparisons
|
918
|
+
// -----------------------------------------------------------------------------
|
919
|
+
|
920
|
+
///@name Extended interval comparisons
|
921
|
+
///
|
922
|
+
///
|
923
|
+
///@{
|
924
|
+
|
925
|
+
|
926
|
+
template<typename T_, typename RepType_, class ConcreteInterval_>
|
927
|
+
inline
|
928
|
+
static p1788::overlapping::overlapping_state
|
929
|
+
overlap(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, base_interval<T_, Flavor, RepType_, ConcreteInterval_> const& y);
|
930
|
+
|
931
|
+
///@}
|
932
|
+
|
933
|
+
|
934
|
+
}; // class base_interval
|
935
|
+
|
936
|
+
|
937
|
+
|
938
|
+
|
939
|
+
|
940
|
+
|
941
|
+
|
942
|
+
//------------------------------------------------------------------------------
|
943
|
+
//------------------------------------------------------------------------------
|
944
|
+
// (Global) functions on intervals
|
945
|
+
//------------------------------------------------------------------------------
|
946
|
+
//------------------------------------------------------------------------------
|
947
|
+
|
948
|
+
|
949
|
+
///@name Boolean functions on intervals
|
950
|
+
///
|
951
|
+
///
|
952
|
+
///@{
|
953
|
+
|
954
|
+
|
955
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
956
|
+
inline
|
957
|
+
bool is_empty(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
958
|
+
|
959
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
960
|
+
inline
|
961
|
+
bool is_entire(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
962
|
+
|
963
|
+
|
964
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
965
|
+
inline
|
966
|
+
bool equal(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
967
|
+
|
968
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
969
|
+
inline
|
970
|
+
bool operator==(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
971
|
+
|
972
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
973
|
+
inline
|
974
|
+
bool operator!=(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
975
|
+
|
976
|
+
|
977
|
+
|
978
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
979
|
+
inline
|
980
|
+
bool subset(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
981
|
+
|
982
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
983
|
+
inline
|
984
|
+
bool superset(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
985
|
+
|
986
|
+
|
987
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
988
|
+
inline
|
989
|
+
bool less(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
990
|
+
|
991
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
992
|
+
inline
|
993
|
+
bool greater(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
994
|
+
|
995
|
+
|
996
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
997
|
+
inline
|
998
|
+
bool precedes(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
999
|
+
|
1000
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1001
|
+
inline
|
1002
|
+
bool succeeds(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1003
|
+
|
1004
|
+
|
1005
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1006
|
+
inline
|
1007
|
+
bool interior(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1008
|
+
|
1009
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1010
|
+
inline
|
1011
|
+
bool contains_interior(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1012
|
+
|
1013
|
+
|
1014
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1015
|
+
inline
|
1016
|
+
bool strictly_less(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1017
|
+
|
1018
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1019
|
+
inline
|
1020
|
+
bool strictly_greater(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1021
|
+
|
1022
|
+
|
1023
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1024
|
+
inline
|
1025
|
+
bool strictly_precedes(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1026
|
+
|
1027
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1028
|
+
inline
|
1029
|
+
bool strictly_succeeds(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1030
|
+
|
1031
|
+
|
1032
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1033
|
+
inline
|
1034
|
+
bool disjoint(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1035
|
+
|
1036
|
+
|
1037
|
+
///@}
|
1038
|
+
|
1039
|
+
|
1040
|
+
///@name Recommended boolean functions on intervals
|
1041
|
+
///
|
1042
|
+
///
|
1043
|
+
///@{
|
1044
|
+
|
1045
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1046
|
+
inline
|
1047
|
+
bool is_common_interval(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1048
|
+
|
1049
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1050
|
+
inline
|
1051
|
+
bool is_singleton(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1052
|
+
|
1053
|
+
template<typename T_, typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1054
|
+
inline
|
1055
|
+
bool is_member(T_ m, base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1056
|
+
|
1057
|
+
///@}
|
1058
|
+
|
1059
|
+
|
1060
|
+
|
1061
|
+
///@name Numeric functions on intervals
|
1062
|
+
///
|
1063
|
+
///
|
1064
|
+
///@{
|
1065
|
+
|
1066
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1067
|
+
inline
|
1068
|
+
T inf(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1069
|
+
|
1070
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1071
|
+
inline
|
1072
|
+
T sup(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1073
|
+
|
1074
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1075
|
+
inline
|
1076
|
+
T mid(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1077
|
+
|
1078
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1079
|
+
inline
|
1080
|
+
T rad(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1081
|
+
|
1082
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1083
|
+
inline
|
1084
|
+
std::pair<T,T> mid_rad(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1085
|
+
|
1086
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1087
|
+
inline
|
1088
|
+
T wid(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1089
|
+
|
1090
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1091
|
+
inline
|
1092
|
+
T mag(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1093
|
+
|
1094
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1095
|
+
inline
|
1096
|
+
T mig(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1097
|
+
|
1098
|
+
///@}
|
1099
|
+
|
1100
|
+
|
1101
|
+
|
1102
|
+
///@name Set operations
|
1103
|
+
///
|
1104
|
+
///
|
1105
|
+
///@{
|
1106
|
+
|
1107
|
+
|
1108
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1109
|
+
inline
|
1110
|
+
ConcreteInterval intersection(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1111
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1112
|
+
|
1113
|
+
|
1114
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1115
|
+
inline
|
1116
|
+
ConcreteInterval convex_hull(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1117
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1118
|
+
|
1119
|
+
///@}
|
1120
|
+
|
1121
|
+
|
1122
|
+
|
1123
|
+
///@name Forward elementary functions
|
1124
|
+
///
|
1125
|
+
///
|
1126
|
+
///@{
|
1127
|
+
|
1128
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1129
|
+
inline
|
1130
|
+
ConcreteInterval pos(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1131
|
+
|
1132
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1133
|
+
inline
|
1134
|
+
ConcreteInterval operator+(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1135
|
+
|
1136
|
+
|
1137
|
+
|
1138
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1139
|
+
inline
|
1140
|
+
ConcreteInterval neg(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1141
|
+
|
1142
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1143
|
+
inline
|
1144
|
+
ConcreteInterval operator-(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1145
|
+
|
1146
|
+
|
1147
|
+
|
1148
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1149
|
+
inline
|
1150
|
+
ConcreteInterval add(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1151
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1152
|
+
|
1153
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1154
|
+
inline
|
1155
|
+
ConcreteInterval operator+(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1156
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1157
|
+
|
1158
|
+
|
1159
|
+
|
1160
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1161
|
+
inline
|
1162
|
+
ConcreteInterval sub(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1163
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1164
|
+
|
1165
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1166
|
+
inline
|
1167
|
+
ConcreteInterval operator-(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1168
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1169
|
+
|
1170
|
+
|
1171
|
+
|
1172
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1173
|
+
inline
|
1174
|
+
ConcreteInterval mul(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1175
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1176
|
+
|
1177
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1178
|
+
inline
|
1179
|
+
ConcreteInterval operator*(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1180
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1181
|
+
|
1182
|
+
|
1183
|
+
|
1184
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1185
|
+
inline
|
1186
|
+
ConcreteInterval div(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1187
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1188
|
+
|
1189
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1190
|
+
inline
|
1191
|
+
ConcreteInterval operator/(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1192
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1193
|
+
|
1194
|
+
|
1195
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1196
|
+
inline
|
1197
|
+
ConcreteInterval recip(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1198
|
+
|
1199
|
+
|
1200
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1201
|
+
inline
|
1202
|
+
ConcreteInterval sqr(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1203
|
+
|
1204
|
+
|
1205
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1206
|
+
inline
|
1207
|
+
ConcreteInterval sqrt(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1208
|
+
|
1209
|
+
|
1210
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1211
|
+
inline
|
1212
|
+
ConcreteInterval fma(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1213
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y,
|
1214
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& z);
|
1215
|
+
|
1216
|
+
|
1217
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1218
|
+
inline
|
1219
|
+
ConcreteInterval pown(base_interval<T, Flavor, RepType, ConcreteInterval> const& x, int p);
|
1220
|
+
|
1221
|
+
|
1222
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1223
|
+
inline
|
1224
|
+
ConcreteInterval pow(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1225
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1226
|
+
|
1227
|
+
|
1228
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1229
|
+
inline
|
1230
|
+
ConcreteInterval exp(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1231
|
+
|
1232
|
+
|
1233
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1234
|
+
inline
|
1235
|
+
ConcreteInterval exp2(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1236
|
+
|
1237
|
+
|
1238
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1239
|
+
inline
|
1240
|
+
ConcreteInterval exp10(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1241
|
+
|
1242
|
+
|
1243
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1244
|
+
inline
|
1245
|
+
ConcreteInterval log(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1246
|
+
|
1247
|
+
|
1248
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1249
|
+
inline
|
1250
|
+
ConcreteInterval log2(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1251
|
+
|
1252
|
+
|
1253
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1254
|
+
inline
|
1255
|
+
ConcreteInterval log10(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1256
|
+
|
1257
|
+
|
1258
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1259
|
+
inline
|
1260
|
+
ConcreteInterval sin(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1261
|
+
|
1262
|
+
|
1263
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1264
|
+
inline
|
1265
|
+
ConcreteInterval cos(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1266
|
+
|
1267
|
+
|
1268
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1269
|
+
inline
|
1270
|
+
ConcreteInterval tan(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1271
|
+
|
1272
|
+
|
1273
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1274
|
+
inline
|
1275
|
+
ConcreteInterval asin(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1276
|
+
|
1277
|
+
|
1278
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1279
|
+
inline
|
1280
|
+
ConcreteInterval acos(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1281
|
+
|
1282
|
+
|
1283
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1284
|
+
inline
|
1285
|
+
ConcreteInterval atan(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1286
|
+
|
1287
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1288
|
+
inline
|
1289
|
+
ConcreteInterval atan2(base_interval<T, Flavor, RepType, ConcreteInterval> const& y,
|
1290
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1291
|
+
|
1292
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1293
|
+
inline
|
1294
|
+
ConcreteInterval sinh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1295
|
+
|
1296
|
+
|
1297
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1298
|
+
inline
|
1299
|
+
ConcreteInterval cosh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1300
|
+
|
1301
|
+
|
1302
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1303
|
+
inline
|
1304
|
+
ConcreteInterval tanh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1305
|
+
|
1306
|
+
|
1307
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1308
|
+
inline
|
1309
|
+
ConcreteInterval asinh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1310
|
+
|
1311
|
+
|
1312
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1313
|
+
inline
|
1314
|
+
ConcreteInterval acosh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1315
|
+
|
1316
|
+
|
1317
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1318
|
+
inline
|
1319
|
+
ConcreteInterval atanh(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1320
|
+
|
1321
|
+
|
1322
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1323
|
+
inline
|
1324
|
+
ConcreteInterval sign(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1325
|
+
|
1326
|
+
|
1327
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1328
|
+
inline
|
1329
|
+
ConcreteInterval ceil(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1330
|
+
|
1331
|
+
|
1332
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1333
|
+
inline
|
1334
|
+
ConcreteInterval floor(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1335
|
+
|
1336
|
+
|
1337
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1338
|
+
inline
|
1339
|
+
ConcreteInterval trunc(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1340
|
+
|
1341
|
+
|
1342
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1343
|
+
inline
|
1344
|
+
ConcreteInterval round_ties_to_even(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1345
|
+
|
1346
|
+
|
1347
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1348
|
+
inline
|
1349
|
+
ConcreteInterval round_ties_to_away(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1350
|
+
|
1351
|
+
|
1352
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1353
|
+
inline
|
1354
|
+
ConcreteInterval abs(base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1355
|
+
|
1356
|
+
|
1357
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1358
|
+
inline
|
1359
|
+
ConcreteInterval min(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1360
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1361
|
+
|
1362
|
+
|
1363
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1364
|
+
inline
|
1365
|
+
ConcreteInterval max(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1366
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1367
|
+
|
1368
|
+
///@}
|
1369
|
+
|
1370
|
+
|
1371
|
+
|
1372
|
+
///@name Cancellative addition and subtraction
|
1373
|
+
///
|
1374
|
+
///
|
1375
|
+
///@{
|
1376
|
+
|
1377
|
+
|
1378
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1379
|
+
inline
|
1380
|
+
ConcreteInterval cancel_plus(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1381
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1382
|
+
|
1383
|
+
|
1384
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1385
|
+
inline
|
1386
|
+
ConcreteInterval cancel_minus(base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1387
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& y);
|
1388
|
+
|
1389
|
+
///@}
|
1390
|
+
|
1391
|
+
|
1392
|
+
|
1393
|
+
///@name Two-output division
|
1394
|
+
///
|
1395
|
+
///
|
1396
|
+
///@{
|
1397
|
+
|
1398
|
+
|
1399
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1400
|
+
inline
|
1401
|
+
std::pair<ConcreteInterval, ConcreteInterval>
|
1402
|
+
mul_rev_to_pair(base_interval<T, Flavor, RepType, ConcreteInterval> const& b,
|
1403
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
1404
|
+
|
1405
|
+
///@}
|
1406
|
+
|
1407
|
+
|
1408
|
+
|
1409
|
+
|
1410
|
+
|
1411
|
+
///@name Reverse elementary functions
|
1412
|
+
///
|
1413
|
+
///
|
1414
|
+
///@{
|
1415
|
+
|
1416
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1417
|
+
inline
|
1418
|
+
ConcreteInterval sqr_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
1419
|
+
|
1420
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1421
|
+
inline
|
1422
|
+
ConcreteInterval sqr_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
1423
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1424
|
+
|
1425
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1426
|
+
inline
|
1427
|
+
ConcreteInterval abs_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
1428
|
+
|
1429
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1430
|
+
inline
|
1431
|
+
ConcreteInterval abs_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
1432
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1433
|
+
|
1434
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1435
|
+
inline
|
1436
|
+
ConcreteInterval pown_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c, int p);
|
1437
|
+
|
1438
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1439
|
+
inline
|
1440
|
+
ConcreteInterval pown_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
1441
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x,
|
1442
|
+
int p);
|
1443
|
+
|
1444
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1445
|
+
inline
|
1446
|
+
ConcreteInterval sin_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
1447
|
+
|
1448
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1449
|
+
inline
|
1450
|
+
ConcreteInterval sin_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
1451
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1452
|
+
|
1453
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1454
|
+
inline
|
1455
|
+
ConcreteInterval cos_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
1456
|
+
|
1457
|
+
|
1458
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1459
|
+
inline
|
1460
|
+
ConcreteInterval cos_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
1461
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1462
|
+
|
1463
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1464
|
+
inline
|
1465
|
+
ConcreteInterval tan_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
1466
|
+
|
1467
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1468
|
+
inline
|
1469
|
+
ConcreteInterval tan_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
1470
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1471
|
+
|
1472
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1473
|
+
inline
|
1474
|
+
ConcreteInterval cosh_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
1475
|
+
|
1476
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1477
|
+
inline
|
1478
|
+
ConcreteInterval cosh_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
1479
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1480
|
+
|
1481
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1482
|
+
inline
|
1483
|
+
ConcreteInterval mul_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& b,
|
1484
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& c);
|
1485
|
+
|
1486
|
+
template<typename T, template<typename> class Flavor, typename RepType, class ConcreteInterval>
|
1487
|
+
inline
|
1488
|
+
ConcreteInterval mul_rev(base_interval<T, Flavor, RepType, ConcreteInterval> const& b,
|
1489
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& c,
|
1490
|
+
base_interval<T, Flavor, RepType, ConcreteInterval> const& x);
|
1491
|
+
|
1492
|
+
///@}
|
1493
|
+
|
1494
|
+
|
1495
|
+
|
1496
|
+
///@name Extended interval comparisons
|
1497
|
+
///
|
1498
|
+
///
|
1499
|
+
///@{
|
1500
|
+
|
1501
|
+
template<typename T1, template<typename> class Flavor, typename RepType1, class ConcreteInterval1, typename T2, typename RepType2, class ConcreteInterval2>
|
1502
|
+
inline
|
1503
|
+
p1788::overlapping::overlapping_state
|
1504
|
+
overlap(base_interval<T1, Flavor, RepType1, ConcreteInterval1> const& x, base_interval<T2, Flavor, RepType2, ConcreteInterval2> const& y);
|
1505
|
+
|
1506
|
+
|
1507
|
+
///@}
|
1508
|
+
|
1509
|
+
|
1510
|
+
|
1511
|
+
} // namespace infsup
|
1512
|
+
|
1513
|
+
} // namespace p1788
|
1514
|
+
|
1515
|
+
|
1516
|
+
#include "p1788/infsup/base_interval_io_impl.hpp"
|
1517
|
+
#include "p1788/infsup/base_interval_num_func_impl.hpp"
|
1518
|
+
#include "p1788/infsup/base_interval_bool_func_impl.hpp"
|
1519
|
+
#include "p1788/infsup/base_interval_rec_bool_func_impl.hpp"
|
1520
|
+
#include "p1788/infsup/base_interval_set_op_impl.hpp"
|
1521
|
+
#include "p1788/infsup/base_interval_elem_func_impl.hpp"
|
1522
|
+
#include "p1788/infsup/base_interval_cancel_func_impl.hpp"
|
1523
|
+
#include "p1788/infsup/base_interval_mul_rev_to_pair_func_impl.hpp"
|
1524
|
+
#include "p1788/infsup/base_interval_rev_func_impl.hpp"
|
1525
|
+
#include "p1788/infsup/base_interval_rec_overlap_impl.hpp"
|
1526
|
+
|
1527
|
+
|
1528
|
+
|
1529
|
+
#endif // LIBIEEEP1788_P1788_INFSUP_BASE_INTERVAL_HPP
|