std::log(std::complex)
From cppreference.com
| ヘッダ <complex> で定義 |
||
| template< class T > std::complex<T> log( const std::complex<T>& z ); |
||
複素数 z の(自然対数、底 e)複素対数を計算します。分岐は負の実軸に沿って定義されます。
目次 |
[edit] パラメータ
| z | - | complex value |
[edit] 戻り値
エラーが発生しない場合、 z の自然対数(複素数)が返されます。戻り値の範囲は、虚軸に沿った区間 [−iπ, +iπ] の帯状領域であり、実軸に沿っては数学的に有界ではありません。
[edit] エラー処理と特殊値
エラーは math_errhandling と一致する方法で報告される。
実装がIEEE浮動小数点演算をサポートしている場合、
- この関数は、虚部の符号を考慮して分岐切断上で連続する。
- std::log(std::conj(z)) == std::conj(std::log(z))
- もし z が
(-0,+0)の場合、結果は(-∞,π)となり、 FE_DIVBYZERO が発生します。 - もし z が
(+0,+0)の場合、結果は(-∞,+0)となり、 FE_DIVBYZERO が発生します。 - もし z が
(x,+∞)(任意の有限な x に対して)の場合、結果は(+∞,π/2)となります。 - もし z が
(x,NaN)(任意の有限な x に対して)の場合、結果は(NaN,NaN)となり、 FE_INVALID が発生する可能性があります。 - もし z が
(-∞,y)(任意の有限な正の y に対して)の場合、結果は(+∞,π)となります。 - もし z が
(+∞,y)(任意の有限な正の y に対して)の場合、結果は(+∞,+0)となります。 - もし z が
(-∞,+∞)の場合、結果は(+∞,3π/4)となります。 - もし z が
(+∞,+∞)の場合、結果は(+∞,π/4)となります。 - もし z が
(±∞,NaN)の場合、結果は(+∞,NaN)となります。 - z が
(NaN,y)(任意の有限 y) の場合、結果は(NaN,NaN)になり、FE_INVALID が発生する可能性があります。 - もし z が
(NaN,+∞)の場合、結果は(+∞,NaN)となります。 - z が
(NaN,NaN)の場合、結果は(NaN,NaN)
[edit] 注記
極座標成分 (r,θ) を持つ複素数 z の自然対数は、 ln r + i(θ+2nπ) に等しく、主値は ln r + iθ です。
この関数のセマンティクスは、C言語の関数 clog と一貫性があるように意図されています。
[edit] 例
このコードを実行
#include <cmath> #include <complex> #include <iostream> int main() { std::complex<double> z {0.0, 1.0}; // r = 1, θ = pi / 2 std::cout << "2 * log" << z << " = " << 2.0 * std::log(z) << '\n'; std::complex<double> z2 {sqrt(2.0) / 2, sqrt(2.0) / 2}; // r = 1, θ = pi / 4 std::cout << "4 * log" << z2 << " = " << 4.0 * std::log(z2) << '\n'; std::complex<double> z3 {-1.0, 0.0}; // r = 1, θ = pi std::cout << "log" << z3 << " = " << std::log(z3) << '\n'; std::complex<double> z4 {-1.0, -0.0}; // the other side of the cut std::cout << "log" << z4 << " (the other side of the cut) = " << std::log(z4) << '\n'; }
実行結果の例
2 * log(0,1) = (0,3.14159) 4 * log(0.707107,0.707107) = (0,3.14159) log(-1,0) = (0,3.14159) log(-1,-0) (the other side of the cut) = (0,-3.14159)
[edit] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2597 | C++98 | 仕様で符号付きゼロの虚部が不適切に扱われている | 誤った要件が削除された |
[edit] 関連情報
| 複素数の常用対数、分枝切断は負の実軸に沿う (関数テンプレート) | |
| 複素数の底eの指数関数 (関数テンプレート) | |
| (C++11)(C++11) |
自然対数 (e を底とする) を計算する (ln(x)) (関数) |
| valarrayの各要素に関数std::logを適用する (function template) | |
| clog の C言語ドキュメント
| |