annotate DEPENDENCIES/generic/include/boost/numeric/interval/rounded_transc.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 /* Boost interval/rounded_transc.hpp template implementation file
Chris@16 2 *
Chris@16 3 * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
Chris@16 4 *
Chris@16 5 * Distributed under the Boost Software License, Version 1.0.
Chris@16 6 * (See accompanying file LICENSE_1_0.txt or
Chris@16 7 * copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8 */
Chris@16 9
Chris@16 10 #ifndef BOOST_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP
Chris@16 11 #define BOOST_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP
Chris@16 12
Chris@16 13 #include <boost/numeric/interval/rounding.hpp>
Chris@16 14 #include <boost/numeric/interval/detail/bugs.hpp>
Chris@16 15 #include <boost/config/no_tr1/cmath.hpp>
Chris@16 16
Chris@16 17 namespace boost {
Chris@16 18 namespace numeric {
Chris@16 19 namespace interval_lib {
Chris@16 20
Chris@16 21 template<class T, class Rounding>
Chris@16 22 struct rounded_transc_exact: Rounding
Chris@16 23 {
Chris@16 24 # define BOOST_NUMERIC_INTERVAL_new_func(f) \
Chris@16 25 T f##_down(const T& x) { BOOST_NUMERIC_INTERVAL_using_math(f); return f(x); } \
Chris@16 26 T f##_up (const T& x) { BOOST_NUMERIC_INTERVAL_using_math(f); return f(x); }
Chris@16 27 BOOST_NUMERIC_INTERVAL_new_func(exp)
Chris@16 28 BOOST_NUMERIC_INTERVAL_new_func(log)
Chris@16 29 BOOST_NUMERIC_INTERVAL_new_func(sin)
Chris@16 30 BOOST_NUMERIC_INTERVAL_new_func(cos)
Chris@16 31 BOOST_NUMERIC_INTERVAL_new_func(tan)
Chris@16 32 BOOST_NUMERIC_INTERVAL_new_func(asin)
Chris@16 33 BOOST_NUMERIC_INTERVAL_new_func(acos)
Chris@16 34 BOOST_NUMERIC_INTERVAL_new_func(atan)
Chris@16 35 BOOST_NUMERIC_INTERVAL_new_func(sinh)
Chris@16 36 BOOST_NUMERIC_INTERVAL_new_func(cosh)
Chris@16 37 BOOST_NUMERIC_INTERVAL_new_func(tanh)
Chris@16 38 # undef BOOST_NUMERIC_INTERVAL_new_func
Chris@16 39 # define BOOST_NUMERIC_INTERVAL_new_func(f) \
Chris@16 40 T f##_down(const T& x) { BOOST_NUMERIC_INTERVAL_using_ahyp(f); return f(x); } \
Chris@16 41 T f##_up (const T& x) { BOOST_NUMERIC_INTERVAL_using_ahyp(f); return f(x); }
Chris@16 42 BOOST_NUMERIC_INTERVAL_new_func(asinh)
Chris@16 43 BOOST_NUMERIC_INTERVAL_new_func(acosh)
Chris@16 44 BOOST_NUMERIC_INTERVAL_new_func(atanh)
Chris@16 45 # undef BOOST_NUMERIC_INTERVAL_new_func
Chris@16 46 };
Chris@16 47
Chris@16 48 template<class T, class Rounding>
Chris@16 49 struct rounded_transc_std: Rounding
Chris@16 50 {
Chris@16 51 # define BOOST_NUMERIC_INTERVAL_new_func(f) \
Chris@16 52 T f##_down(const T& x) \
Chris@16 53 { BOOST_NUMERIC_INTERVAL_using_math(f); \
Chris@16 54 this->downward(); return this->force_rounding(f(x)); } \
Chris@16 55 T f##_up (const T& x) \
Chris@16 56 { BOOST_NUMERIC_INTERVAL_using_math(f); \
Chris@16 57 this->upward(); return this->force_rounding(f(x)); }
Chris@16 58 BOOST_NUMERIC_INTERVAL_new_func(exp)
Chris@16 59 BOOST_NUMERIC_INTERVAL_new_func(log)
Chris@16 60 BOOST_NUMERIC_INTERVAL_new_func(sin)
Chris@16 61 BOOST_NUMERIC_INTERVAL_new_func(cos)
Chris@16 62 BOOST_NUMERIC_INTERVAL_new_func(tan)
Chris@16 63 BOOST_NUMERIC_INTERVAL_new_func(asin)
Chris@16 64 BOOST_NUMERIC_INTERVAL_new_func(acos)
Chris@16 65 BOOST_NUMERIC_INTERVAL_new_func(atan)
Chris@16 66 BOOST_NUMERIC_INTERVAL_new_func(sinh)
Chris@16 67 BOOST_NUMERIC_INTERVAL_new_func(cosh)
Chris@16 68 BOOST_NUMERIC_INTERVAL_new_func(tanh)
Chris@16 69 # undef BOOST_NUMERIC_INTERVAL_new_func
Chris@16 70 # define BOOST_NUMERIC_INTERVAL_new_func(f) \
Chris@16 71 T f##_down(const T& x) \
Chris@16 72 { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
Chris@16 73 this->downward(); return this->force_rounding(f(x)); } \
Chris@16 74 T f##_up (const T& x) \
Chris@16 75 { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
Chris@16 76 this->upward(); return this->force_rounding(f(x)); }
Chris@16 77 BOOST_NUMERIC_INTERVAL_new_func(asinh)
Chris@16 78 BOOST_NUMERIC_INTERVAL_new_func(acosh)
Chris@16 79 BOOST_NUMERIC_INTERVAL_new_func(atanh)
Chris@16 80 # undef BOOST_NUMERIC_INTERVAL_new_func
Chris@16 81 };
Chris@16 82
Chris@16 83 template<class T, class Rounding>
Chris@16 84 struct rounded_transc_opp: Rounding
Chris@16 85 {
Chris@16 86 # define BOOST_NUMERIC_INTERVAL_new_func(f) \
Chris@16 87 T f##_down(const T& x) \
Chris@16 88 { BOOST_NUMERIC_INTERVAL_using_math(f); \
Chris@16 89 this->downward(); T y = this->force_rounding(f(x)); \
Chris@16 90 this->upward(); return y; } \
Chris@16 91 T f##_up (const T& x) \
Chris@16 92 { BOOST_NUMERIC_INTERVAL_using_math(f); \
Chris@16 93 return this->force_rounding(f(x)); }
Chris@16 94 BOOST_NUMERIC_INTERVAL_new_func(exp)
Chris@16 95 BOOST_NUMERIC_INTERVAL_new_func(log)
Chris@16 96 BOOST_NUMERIC_INTERVAL_new_func(cos)
Chris@16 97 BOOST_NUMERIC_INTERVAL_new_func(acos)
Chris@16 98 BOOST_NUMERIC_INTERVAL_new_func(cosh)
Chris@16 99 # undef BOOST_NUMERIC_INTERVAL_new_func
Chris@16 100 # define BOOST_NUMERIC_INTERVAL_new_func(f) \
Chris@16 101 T f##_down(const T& x) \
Chris@16 102 { BOOST_NUMERIC_INTERVAL_using_math(f); \
Chris@16 103 return -this->force_rounding(-f(x)); } \
Chris@16 104 T f##_up (const T& x) \
Chris@16 105 { BOOST_NUMERIC_INTERVAL_using_math(f); \
Chris@16 106 return this->force_rounding(f(x)); }
Chris@16 107 BOOST_NUMERIC_INTERVAL_new_func(sin)
Chris@16 108 BOOST_NUMERIC_INTERVAL_new_func(tan)
Chris@16 109 BOOST_NUMERIC_INTERVAL_new_func(asin)
Chris@16 110 BOOST_NUMERIC_INTERVAL_new_func(atan)
Chris@16 111 BOOST_NUMERIC_INTERVAL_new_func(sinh)
Chris@16 112 BOOST_NUMERIC_INTERVAL_new_func(tanh)
Chris@16 113 # undef BOOST_NUMERIC_INTERVAL_new_func
Chris@16 114 # define BOOST_NUMERIC_INTERVAL_new_func(f) \
Chris@16 115 T f##_down(const T& x) \
Chris@16 116 { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
Chris@16 117 this->downward(); T y = this->force_rounding(f(x)); \
Chris@16 118 this->upward(); return y; } \
Chris@16 119 T f##_up (const T& x) \
Chris@16 120 { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
Chris@16 121 return this->force_rounding(f(x)); }
Chris@16 122 BOOST_NUMERIC_INTERVAL_new_func(asinh)
Chris@16 123 BOOST_NUMERIC_INTERVAL_new_func(atanh)
Chris@16 124 # undef BOOST_NUMERIC_INTERVAL_new_func
Chris@16 125 # define BOOST_NUMERIC_INTERVAL_new_func(f) \
Chris@16 126 T f##_down(const T& x) \
Chris@16 127 { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
Chris@16 128 return -this->force_rounding(-f(x)); } \
Chris@16 129 T f##_up (const T& x) \
Chris@16 130 { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
Chris@16 131 return this->force_rounding(f(x)); }
Chris@16 132 BOOST_NUMERIC_INTERVAL_new_func(acosh)
Chris@16 133 # undef BOOST_NUMERIC_INTERVAL_new_func
Chris@16 134 };
Chris@16 135
Chris@16 136 } // namespace interval_lib
Chris@16 137 } // namespace numeric
Chris@16 138 } // namespace boost
Chris@16 139
Chris@16 140 #endif // BOOST_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP