cbrt.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 78 行

HPP
78
字号
//  (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_SF_CBRT_HPP#define BOOST_MATH_SF_CBRT_HPP#ifdef _MSC_VER#pragma once#endif#include <boost/math/tools/roots.hpp>#include <boost/math/special_functions/math_fwd.hpp>namespace boost{ namespace math{namespace detail{   template <class T>   struct cbrt_functor   {       cbrt_functor(T const& target) : a(target){}       std::tr1::tuple<T, T, T> operator()(T const& z)       {         T sqr = z * z;         return std::tr1::make_tuple(sqr * z - a, 3 * sqr, 6 * z);       }   private:       T a;   };template <class T, class Policy>T cbrt_imp(T z, const Policy&){   BOOST_MATH_STD_USING   int i_exp, sign(1);   if(z < 0)   {      z = -z;      sign = -sign;   }   if(z == 0)      return 0;   frexp(z, &i_exp);   T min = static_cast<T>(ldexp(0.5, i_exp/3));   T max = static_cast<T>(ldexp(2.0, i_exp/3));   T guess = static_cast<T>(ldexp(1.0, i_exp/3));   int digits = (policies::digits<T, Policy>()) / 2;   return sign * tools::halley_iterate(detail::cbrt_functor<T>(z), guess, min, max, digits);}} // namespace detailtemplate <class T, class Policy>inline typename tools::promote_args<T>::type cbrt(T z, const Policy& pol){   typedef typename tools::promote_args<T>::type result_type;   return detail::cbrt_imp(result_type(z), pol);}template <class T>inline typename tools::promote_args<T>::type cbrt(T z){   return cbrt(z, policies::policy<>());}} // namespace math} // namespace boost#endif // BOOST_MATH_SF_CBRT_HPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?