std::tanh(std::complex)
定义于头文件 <complex>
|
||
template< class T > complex<T> tanh( const complex<T>& z ); |
(C++11 起) | |
计算复数值 z
的复双曲正切。
参数
z | - | 复数值 |
返回值
若不发生错误,则返回 z
的复双曲正切。
错误处理及特殊值
报告的错误与 math_errhandling 一致。
若实现支持 IEEE 浮点算术,则
- std::tanh(std::conj(z)) == std::conj(std::tanh(z))
- std::tanh(-z) == -std::tanh(z)
- 若
z
为(+0,+0)
,则结果为(+0,+0)
。 - 若
z
为(x,+∞)
(对于任何[1]有限 x ),结果为(NaN,NaN)
并引发 FE_INVALID 。 - 若
z
为(x,NaN)
(对于任何[2]有限 x ),结果为(NaN,NaN)
并可能引发 FE_INVALID 。 - 若
z
为(+∞,y)
(对于任何有限正 y ),结果为(1,+0)
。 - 若
z
为(+∞,+∞)
,则结果为(1,±0)
(虚部符号未指定)。 - 若
z
为(+∞,NaN)
,则结果为(1,±0)
(虚部符号未指定)。 - 若
z
为(NaN,+0)
,则结果为(NaN,+0)
。 - 若
z
为(NaN,y)
(对于任何非零 y ),则结果为(NaN,NaN)
并可能引发 FE_INVALID 。 - 若
z
为(NaN,NaN)
,则结果为(NaN,NaN)
。
- ↑ 由 C11 DR471 ,这只对非零 x 成立。若
z
为(0,∞)
,则结果应为(0,NaN)
。 - ↑ 由 C11 DR471 ,这只对非零 x 成立。若
z
为(0,NaN)
,则结果应为(0,NaN)
。
注意
双曲正切的数学定义是 tanh z =ez -e-z |
ez +e-z |
双曲正切是复平面上的解析函数且无分支切割。它对于虚部是周期的,周期为 πi ,而且沿虚轴有一阶极点,位于坐标 (0, π(1/2 + n)) 。然而无常用浮点表示能准确表示 π/2 ,故没有参数值能导致极点错误。
示例
运行此代码
#include <iostream> #include <cmath> #include <complex> int main() { std::cout << std::fixed; std::complex<double> z(1, 0); // 表现类似沿实轴的 tanh std::cout << "tanh" << z << " = " << std::tanh(z) << " (tanh(1) = " << std::tanh(1) << ")\n"; std::complex<double> z2(0, 1); // 表现类似沿虚轴的正切 std::cout << "tanh" << z2 << " = " << std::tanh(z2) << " ( tan(1) = " << std::tan(1) << ")\n"; }
输出:
tanh(1.000000,0.000000) = (0.761594,0.000000) (tanh(1) = 0.761594) tanh(0.000000,1.000000) = (0.000000,1.557408) ( tan(1) = 1.557408)
参阅
计算复数的双曲正弦( sinh(z) ) (函数模板) | |
计算复数的双曲余弦( cosh(z) ) (函数模板) | |
(C++11) |
计算复数的反双曲正切( artanh(z) ) (函数模板) |
(C++11)(C++11) |
计算双曲正切( tanh(x) ) (函数) |
在 valarray 的每个元素上调用 std::tanh 函数 (函数模板) |