| [/ math.qbk |
| Copyright 2006 Hubert Holin and John Maddock. |
| Distributed under 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). |
| ] |
| |
| [def __form1 [^\[0;+'''∞'''\[]] |
| [def __form2 [^\]-'''∞''';+1\[]] |
| [def __form3 [^\]-'''∞''';-1\[]] |
| [def __form4 [^\]+1;+'''∞'''\[]] |
| [def __form5 [^\[-1;-1+'''ε'''\[]] |
| [def __form6 '''ε'''] |
| [def __form7 [^\]+1-'''ε''';+1\]]] |
| |
| [def __effects [*Effects: ]] |
| [def __formula [*Formula: ]] |
| [def __exm1 '''<code>e<superscript>x</superscript> - 1</code>'''[space]] |
| [def __ex '''<code>e<superscript>x</superscript></code>'''] |
| [def __te '''2ε'''] |
| |
| [section:inv_hyper Inverse Hyperbolic Functions] |
| |
| [section:inv_hyper_over Inverse Hyperbolic Functions Overview] |
| |
| The exponential funtion is defined, for all objects for which this makes sense, |
| as the power series |
| [equation special_functions_blurb1], |
| with ['[^n! = 1x2x3x4x5...xn]] (and ['[^0! = 1]] by definition) being the factorial of ['[^n]]. |
| In particular, the exponential function is well defined for real numbers, |
| complex number, quaternions, octonions, and matrices of complex numbers, |
| among others. |
| |
| [: ['[*Graph of exp on R]] ] |
| |
| [: [$../graphs/exp_on_r.png] ] |
| |
| [: ['[*Real and Imaginary parts of exp on C]]] |
| [: [$../graphs/im_exp_on_c.png]] |
| |
| The hyperbolic functions are defined as power series which |
| can be computed (for reals, complex, quaternions and octonions) as: |
| |
| Hyperbolic cosine: [equation special_functions_blurb5] |
| |
| Hyperbolic sine: [equation special_functions_blurb6] |
| |
| Hyperbolic tangent: [equation special_functions_blurb7] |
| |
| [: ['[*Trigonometric functions on R (cos: purple; sin: red; tan: blue)]]] |
| [: [$../graphs/trigonometric.png]] |
| |
| [: ['[*Hyperbolic functions on r (cosh: purple; sinh: red; tanh: blue)]]] |
| [: [$../graphs/hyperbolic.png]] |
| |
| The hyperbolic sine is one to one on the set of real numbers, |
| with range the full set of reals, while the hyperbolic tangent is |
| also one to one on the set of real numbers but with range __form1, and |
| therefore both have inverses. The hyperbolic cosine is one to one from __form2 |
| onto __form3 (and from __form4 onto __form3); the inverse function we use |
| here is defined on __form3 with range __form2. |
| |
| The inverse of the hyperbolic tangent is called the Argument hyperbolic tangent, |
| and can be computed as [equation special_functions_blurb15]. |
| |
| The inverse of the hyperbolic sine is called the Argument hyperbolic sine, |
| and can be computed (for __form5) as [equation special_functions_blurb17]. |
| |
| The inverse of the hyperbolic cosine is called the Argument hyperbolic cosine, |
| and can be computed as [equation special_functions_blurb18]. |
| |
| [endsect] |
| |
| [section:acosh acosh] |
| |
| `` |
| #include <boost/math/special_functions/acosh.hpp> |
| `` |
| |
| template<class T> |
| ``__sf_result`` acosh(const T x); |
| |
| template<class T, class ``__Policy``> |
| ``__sf_result`` acosh(const T x, const ``__Policy``&); |
| |
| Computes the reciprocal of (the restriction to the range of __form1) |
| [link math_toolkit.special.inv_hyper.inv_hyper_over |
| the hyperbolic cosine function], at x. Values returned are positive. |
| |
| If x is in the range __form2 then returns the result of __domain_error. |
| |
| The return type of this function is computed using the __arg_pomotion_rules: |
| the return type is `double` when T is an integer type, and T otherwise. |
| |
| [optional_policy] |
| |
| [graph acosh] |
| |
| [h4 Accuracy] |
| |
| Generally accuracy is to within 1 or 2 epsilon across all supported platforms. |
| |
| [h4 Testing] |
| |
| This function is tested using a combination of random test values designed to give |
| full function coverage computed at high precision using the "naive" formula: |
| |
| [equation acosh1] |
| |
| along with a selection of sanity check values |
| computed using functions.wolfram.com to at least 50 decimal digits. |
| |
| [h4 Implementation] |
| |
| For sufficiently large x, we can use the |
| [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/06/01/06/01/0001/ |
| approximation]: |
| |
| [equation acosh2] |
| |
| For x sufficiently close to 1 we can use the |
| [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/06/01/04/01/0001/ |
| approximation]: |
| |
| [equation acosh4] |
| |
| Otherwise for x close to 1 we can use the following rearrangement of the |
| primary definition to preserve accuracy: |
| |
| [equation acosh3] |
| |
| Otherwise the |
| [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/02/ |
| primary definition] is used: |
| |
| [equation acosh1] |
| |
| [endsect] |
| |
| [section:asinh asinh] |
| |
| `` |
| #include <boost/math/special_functions/asinh.hpp> |
| `` |
| |
| template<class T> |
| ``__sf_result`` asinh(const T x); |
| |
| template<class T, class ``__Policy``> |
| ``__sf_result`` asinh(const T x, const ``__Policy``&); |
| |
| Computes the reciprocal of |
| [link math_toolkit.special.inv_hyper.inv_hyper_over |
| the hyperbolic sine function]. |
| |
| The return type of this function is computed using the __arg_pomotion_rules: |
| the return type is `double` when T is an integer type, and T otherwise. |
| |
| [graph asinh] |
| |
| [optional_policy] |
| |
| [h4 Accuracy] |
| |
| Generally accuracy is to within 1 or 2 epsilon across all supported platforms. |
| |
| [h4 Testing] |
| |
| This function is tested using a combination of random test values designed to give |
| full function coverage computed at high precision using the "naive" formula: |
| |
| [equation asinh1] |
| |
| along with a selection of sanity check values |
| computed using functions.wolfram.com to at least 50 decimal digits. |
| |
| [h4 Implementation] |
| |
| For sufficiently large x we can use the |
| [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/06/01/06/01/0001/ |
| approximation]: |
| |
| [equation asinh2] |
| |
| While for very small x we can use the |
| [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/06/01/03/01/0001/ |
| approximation]: |
| |
| [equation asinh3] |
| |
| For 0.5 > x > [epsilon] the following rearrangement of the primary definition is used: |
| |
| [equation asinh4] |
| |
| Otherwise evalution is via the |
| [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/02/ |
| primary definition]: |
| |
| [equation asinh4] |
| |
| [endsect] |
| |
| [section:atanh atanh] |
| |
| `` |
| #include <boost/math/special_functions/atanh.hpp> |
| `` |
| |
| template<class T> |
| ``__sf_result`` atanh(const T x); |
| |
| template<class T, class ``__Policy``> |
| ``__sf_result`` atanh(const T x, const ``__Policy``&); |
| |
| Computes the reciprocal of |
| [link math_toolkit.special.inv_hyper.inv_hyper_over |
| the hyperbolic tangent function], at x. |
| |
| [optional_policy] |
| |
| If x is in the range |
| __form3 |
| or in the range |
| __form4 |
| then returns the result of __domain_error. |
| |
| If x is in the range |
| __form5, |
| then the result of -__overflow_error is returned, with |
| __form6[space] |
| denoting numeric_limits<T>::epsilon(). |
| |
| If x is in the range |
| __form7, |
| then the result of __overflow_error is returned, with |
| __form6[space] |
| denoting |
| numeric_limits<T>::epsilon(). |
| |
| The return type of this function is computed using the __arg_pomotion_rules: |
| the return type is `double` when T is an integer type, and T otherwise. |
| |
| [graph atanh] |
| |
| [h4 Accuracy] |
| |
| Generally accuracy is to within 1 or 2 epsilon across all supported platforms. |
| |
| [h4 Testing] |
| |
| This function is tested using a combination of random test values designed to give |
| full function coverage computed at high precision using the "naive" formula: |
| |
| [equation atanh1] |
| |
| along with a selection of sanity check values |
| computed using functions.wolfram.com to at least 50 decimal digits. |
| |
| [h4 Implementation] |
| |
| For sufficiently small x we can use the |
| [@http://functions.wolfram.com/ElementaryFunctions/ArcTanh/06/01/03/01/ approximation]: |
| |
| [equation atanh2] |
| |
| Otherwise the |
| [@http://functions.wolfram.com/ElementaryFunctions/ArcTanh/02/ primary definition]: |
| |
| [equation atanh1] |
| |
| or it's equivalent form: |
| |
| [equation atanh3] |
| |
| is used. |
| |
| [endsect] |
| |
| [endsect] |