diff options
Diffstat (limited to 'src/third_party/boost-1.60.0/boost/math/special_functions/sqrt1pm1.hpp')
-rw-r--r-- | src/third_party/boost-1.60.0/boost/math/special_functions/sqrt1pm1.hpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/third_party/boost-1.60.0/boost/math/special_functions/sqrt1pm1.hpp b/src/third_party/boost-1.60.0/boost/math/special_functions/sqrt1pm1.hpp new file mode 100644 index 00000000000..293a9d97b31 --- /dev/null +++ b/src/third_party/boost-1.60.0/boost/math/special_functions/sqrt1pm1.hpp @@ -0,0 +1,48 @@ +// (C) Copyright John Maddock 2006. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_SQRT1PM1 +#define BOOST_MATH_SQRT1PM1 + +#ifdef _MSC_VER +#pragma once +#endif + +#include <boost/math/special_functions/math_fwd.hpp> +#include <boost/math/special_functions/log1p.hpp> +#include <boost/math/special_functions/expm1.hpp> + +// +// This algorithm computes sqrt(1+x)-1 for small x: +// + +namespace boost{ namespace math{ + +template <class T, class Policy> +inline typename tools::promote_args<T>::type sqrt1pm1(const T& val, const Policy& pol) +{ + typedef typename tools::promote_args<T>::type result_type; + BOOST_MATH_STD_USING + + if(fabs(result_type(val)) > 0.75) + return sqrt(1 + result_type(val)) - 1; + return boost::math::expm1(boost::math::log1p(val, pol) / 2, pol); +} + +template <class T> +inline typename tools::promote_args<T>::type sqrt1pm1(const T& val) +{ + return sqrt1pm1(val, policies::policy<>()); +} + +} // namespace math +} // namespace boost + +#endif // BOOST_MATH_SQRT1PM1 + + + + + |