命名空间
变体
操作

std::log(std::complex)

来自 cppreference.com
< cpp‎ | numeric‎ | complex
 
 
 
 
定义在头文件 <complex>
template< class T >
std::complex<T> log( const std::complex<T>& z );

计算复数的自然(以 e 为底)对数,其值为 z,分支切割沿负实轴。

内容

[编辑] 参数

z - 复数值

[编辑] 返回值

如果未发生错误,则返回 z 的复数自然对数,其范围为虚轴上的区间 [−iπ, +iπ] 中的条带,并且在实轴上数学上无界。

[编辑] 错误处理和特殊值

错误报告与 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)

[编辑] 注释

复数 z 的自然对数,其极坐标分量为 (r,θ),等于 ln r + i(θ+2nπ),主值为 ln r + iθ

此函数的语义旨在与 C 函数 clog 一致。

[编辑] 示例

#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)

[编辑] 缺陷报告

以下更改行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR 应用于 已发布的行为 正确行为
LWG 2597 C++98 规范错误地处理了符号为零的虚部 错误的要求已删除

[编辑] 参见

复数以 10 为底的对数,分支切割沿负实轴
(函数模板) [编辑]
以 e 为底的复数指数
(函数模板) [编辑]
(C++11)(C++11)
计算自然(以 e 为底)对数 (ln(x))
(函数) [编辑]
将函数 std::log 应用于 valarray 的每个元素
(函数模板) [编辑]
C 文档 适用于 clog