| Home | Libraries | People | FAQ | More

### sqrt1pm1

    #include <boost/math/special_functions/sqrt1pm1.hpp>

namespace boost{ namespace math{

    template <class T>
    calculated-result-type sqrt1pm1(T x);

    template <class T, class Policy>
    calculated-result-type sqrt1pm1(T x, const Policy&);

    }} // namespaces

Returns `sqrt(1+x) - 1`.

The return type of this function is computed using the result type calculation rules: the return is `double` when x is an integer-type and T otherwise.

The final Policy argument is optional and can be used to control the behaviour of the function: how it handles errors, what level of precision to use etc. Refer to the policy documentation for more details.

This function is useful when you need the difference between `sqrt(x)` and 1, when x is itself close to 1.

Implemented in terms of `log1p` and `expm1`.

The following graph illustrates the behaviour of sqrt1pm1:

##### Accuracy

For built in floating-point types `sqrt1pm1` should have approximately 3 epsilon accuracy.

Table 8.84. Error rates for sqrt1pm1

| GNU C++ version 7.1.0 linux double | GNU C++ version 7.1.0 linux long double | Sun compiler version 0x5150 Sun Solaris long double | Microsoft Visual C++ version 14.1 Win32 double
--- | --- | --- | --- | ---
sqrt1pm1 | Max = 1.3ε (Mean = 0.404ε) | Max = 1.33ε (Mean = 0.404ε) | Max = 1.54ε (Mean = 0.563ε) | Max = 1.35ε (Mean = 0.497ε)

##### Testing

A selection of random high precision test values calculated using NTL::RR at 1000-bit precision.