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.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +8 -0
  3. data/AUTHORS +6 -0
  4. data/LICENSE +201 -0
  5. data/NOTICE +29 -0
  6. data/README.md +65 -0
  7. data/ext/libieeep1788_copy/README +3 -0
  8. data/ext/libieeep1788_copy/p1788/AUTHORS +16 -0
  9. data/ext/libieeep1788_copy/p1788/LICENSE +202 -0
  10. data/ext/libieeep1788_copy/p1788/NOTICE +14 -0
  11. data/ext/libieeep1788_copy/p1788/decoration/decoration.hpp +265 -0
  12. data/ext/libieeep1788_copy/p1788/exception/exception.hpp +302 -0
  13. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor.hpp +3443 -0
  14. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_bool_func_impl.hpp +608 -0
  15. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_cancel_func_impl.hpp +229 -0
  16. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_class_impl.hpp +526 -0
  17. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_elem_func_impl.hpp +4533 -0
  18. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_io_impl.hpp +1421 -0
  19. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_mul_rev_to_pair_func_impl.hpp +347 -0
  20. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_num_func_impl.hpp +655 -0
  21. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_rec_bool_func_impl.hpp +146 -0
  22. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_rec_overlap_impl.hpp +188 -0
  23. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_rev_func_impl.hpp +1674 -0
  24. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_set_op_impl.hpp +216 -0
  25. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_setup_func_impl.hpp +68 -0
  26. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_util_func_impl.hpp +135 -0
  27. data/ext/libieeep1788_copy/p1788/flavor/infsup/setbased/mpfr_bin_ieee754_flavor_validation_func_impl.hpp +93 -0
  28. data/ext/libieeep1788_copy/p1788/infsup/base_interval.hpp +1529 -0
  29. data/ext/libieeep1788_copy/p1788/infsup/base_interval_bool_func_impl.hpp +481 -0
  30. data/ext/libieeep1788_copy/p1788/infsup/base_interval_cancel_func_impl.hpp +126 -0
  31. data/ext/libieeep1788_copy/p1788/infsup/base_interval_elem_func_impl.hpp +1581 -0
  32. data/ext/libieeep1788_copy/p1788/infsup/base_interval_io_impl.hpp +59 -0
  33. data/ext/libieeep1788_copy/p1788/infsup/base_interval_mul_rev_to_pair_func_impl.hpp +88 -0
  34. data/ext/libieeep1788_copy/p1788/infsup/base_interval_num_func_impl.hpp +345 -0
  35. data/ext/libieeep1788_copy/p1788/infsup/base_interval_rec_bool_func_impl.hpp +92 -0
  36. data/ext/libieeep1788_copy/p1788/infsup/base_interval_rec_overlap_impl.hpp +72 -0
  37. data/ext/libieeep1788_copy/p1788/infsup/base_interval_rev_func_impl.hpp +656 -0
  38. data/ext/libieeep1788_copy/p1788/infsup/base_interval_set_op_impl.hpp +126 -0
  39. data/ext/libieeep1788_copy/p1788/infsup/decorated_interval.hpp +464 -0
  40. data/ext/libieeep1788_copy/p1788/infsup/forward_declaration.hpp +66 -0
  41. data/ext/libieeep1788_copy/p1788/infsup/interval.hpp +275 -0
  42. data/ext/libieeep1788_copy/p1788/io/io_manip.hpp +531 -0
  43. data/ext/libieeep1788_copy/p1788/overlapping/overlapping.hpp +241 -0
  44. data/ext/libieeep1788_copy/p1788/p1788.hpp +45 -0
  45. data/ext/libieeep1788_copy/p1788/reduction/reduction.hpp +341 -0
  46. data/ext/libieeep1788_copy/p1788/util/io.hpp +63 -0
  47. data/ext/libieeep1788_copy/p1788/util/mixed_type_traits.hpp +140 -0
  48. data/ext/libieeep1788_copy/p1788/util/mpfr_util.hpp +77 -0
  49. data/ext/libieeep1788_copy/p1788/util/mpfr_var.hpp +119 -0
  50. data/ext/libieeep1788_copy/p1788/util/mpfr_var_impl.hpp +382 -0
  51. data/ext/libieeep1788_copy/p1788/version.hpp +34 -0
  52. data/ext/p1788/extconf.rb +49 -0
  53. data/ext/p1788/p1788.cc +3764 -0
  54. data/lib/p1788/version.rb +4 -0
  55. data/lib/p1788.rb +25 -0
  56. data/p1788.gemspec +72 -0
  57. 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