std:: sqrt (std::complex)
From cppreference.net
|
定义于头文件
<complex>
|
||
|
template
<
class
T
>
std:: complex < T > sqrt ( const std:: complex < T > & z ) ; |
||
计算复数 z 的平方根,其分支切割线沿负实轴。
目录 |
参数
| z | - | 要计算平方根的复数 |
返回值
若无错误发生,则返回 z 的平方根,其值域位于右半平面(包含虚轴),实数轴范围为 [0; +∞) ,虚数轴范围为 (−∞; +∞) )。
错误处理与特殊值
错误报告遵循 math_errhandling 规范。
如果实现支持 IEEE 浮点运算,
- 该函数在考虑虚部符号的情况下沿分支割线连续
- std:: sqrt ( std:: conj ( z ) ) == std:: conj ( std:: sqrt ( z ) )
-
若
z
为
(±0,+0),则结果为(+0,+0) -
若
z
为
(x,+∞),则结果为(+∞,+∞)(即使 x 为 NaN) -
若
z
为
(x,NaN),则结果为(NaN,NaN)(除非 x 为 ±∞)且可能引发 FE_INVALID -
若
z
为
(-∞,y),则对于有限正数 y,结果为(+0,+∞) -
若
z
为
(+∞,y),则对于有限正数 y,结果为(+∞,+0) -
若
z
为
(-∞,NaN),则结果为(NaN,∞)(虚部符号未指定) -
若
z
为
(+∞,NaN),则结果为(+∞,NaN) -
若
z
为
(NaN,y),则结果为(NaN,NaN)且可能引发 FE_INVALID -
若
z
为
(NaN,NaN),则结果为(NaN,NaN)
注释
此函数的语义旨在与C函数 csqrt 保持一致。
示例
运行此代码
#include <complex> #include <iostream> int main() { std::cout << "Square root of -4 is " << std::sqrt(std::complex<double>(-4.0, 0.0)) << '\n' << "Square root of (-4,-0) is " << std::sqrt(std::complex<double>(-4.0, -0.0)) << " (the other side of the cut)\n"; }
输出:
Square root of -4 is (0,2) Square root of (-4,-0) is (0,-2) (the other side of the cut)
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2597 | C++98 | 规范对带符号零虚部的处理不当 | 移除错误要求 |
参见
|
复数幂运算,一个或两个参数可以是复数
(函数模板) |
|
|
(C++11)
(C++11)
|
计算平方根 (
√
x
)
(函数) |
|
对 valarray 的每个元素应用函数
std::sqrt
(函数模板) |
|
|
C documentation
for
csqrt
|
|