# std::sqrt(std::complex)

From cppreference.com
< cpp‎ | numeric‎ | complex

Defined in header `<complex>` |  |
template< class T > complex<T> sqrt( const complex<T>& z ); |  |

Computes the square root of the complex number `z` with a branch cut along the negative real axis.

### Parameters

z | - | complex number to take the square root of

### Return value

If no errors occur, returns the square root of `z`, in the range of the right half-plane, including the imaginary axis ([0; +∞) along the real axis and (−∞; +∞) along the imaginary axis.)

### Error handling and special values

Errors are reported consistent with math_errhandling

If the implementation supports IEEE floating-point arithmetic,

- The function is continuous onto the branch cut taking into account the sign of imaginary part
- std::sqrt(std::conj(z)) == std::conj(std::sqrt(z))
- If `z` is `(±0,+0)`, the result is `(+0,+0)`
- If `z` is `(x,+∞)`, the result is `(+∞,+∞)` even if x is NaN
- If `z` is `(x,NaN)`, the result is `(NaN,NaN)` (unless x is ±∞) and FE_INVALID may be raised
- If `z` is `(-∞,y)`, the result is `(+0,+∞)` for finite positive y
- If `z` is `(+∞,y)`, the result is `(+∞,+0)` for finite positive y
- If `z` is `(-∞,NaN)`, the result is `(NaN,∞)` (sign of imaginary part unspecified)
- If `z` is `(+∞,NaN)`, the result is `(+∞,NaN)`
- If `z` is `(NaN,y)`, the result is `(NaN,NaN)` and FE_INVALID may be raised
- If `z` is `(NaN,NaN)`, the result is `(NaN,NaN)`

### Notes

The semantics of this function are intended to be consistent with the C function `csqrt`.

### Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR | Applied to | Behavior as published | Correct behavior
--- | --- | --- | ---
LWG 2597 | C++98 | specification mishandles signed zero imaginary parts | erroneous requirement removed

### Example

Run this code

    #include <iostream>
    #include <complex>

    int main()
    {
        std::cout << "Square root of -4 is "
                  << std::sqrt(std::complex<double>(-4, 0)) << '\n'
                  << "Square root of (-4,-0), the other side of the cut, is "
                  << std::sqrt(std::complex<double>(-4, -0.0)) << '\n';
    }

Output:

    Square root of -4 is (0,2)
    Square root of (-4,-0), the other side of the cut, is (0,-2)

### See also

pow(std::complex) | complex power, one or both arguments may be a complex number (function template)
sqrt sqrtf sqrtl (C++11)(C++11) | computes square root (√x) (function)
sqrt(std::valarray) | applies the function std::sqrt to each element of valarray (function template)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/numeric/complex/sqrt&oldid=94491"