std::sqrt(std::complex)
來自 cppreference.com
| 定義於標頭檔案 <complex> |
||
| template< class T > std::complex<T> sqrt( const std::complex<T>& z ); |
||
計算複數 z 的平方根,其分支切割(branch cut)沿負實軸。
目錄 |
[編輯] 引數
| 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++ 標準。
| 缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
|---|---|---|---|
| LWG 2597 | C++98 | 規範錯誤地處理了有符號的零虛部 | 已刪除錯誤的求值要求 |
[編輯] 另見
| 複數冪,一個或兩個引數可以是複數 (函式模板) | |
| (C++11)(C++11) |
計算平方根(√x) (函式) |
| 將函式 std::sqrt 應用於 valarray 的每個元素 (函式模板) | |
| C 文件 關於 csqrt
| |