std::exp(std::complex)
From cppreference.com
| ヘッダ <complex> で定義 |
||
| template< class T > std::complex<T> exp( const std::complex<T>& z ); |
||
z の e(ネイピア数、2.7182818)を z 乗した値を計算します。
目次 |
[編集] 引数
| z | - | complex value |
[編集] 戻り値
エラーが発生しない場合、z の e 乗、ez
、が返されます。
[編集] エラー処理と特殊な値
エラーは math_errhandling と一致する方法で報告される。
実装がIEEE浮動小数点演算をサポートしている場合、
- std::exp(std::conj(z)) == std::conj(std::exp(z))
- z が
(±0,+0)の場合、結果は(1,+0)です。 - z が
(x,+∞)(任意の有限 x)の場合、結果は(NaN,NaN)となり、FE_INVALID が発生します。 - z が
(x,NaN)(任意の有限 x)の場合、結果は(NaN,NaN)となり、FE_INVALID が発生する場合があります。 - もし z が
(+∞,+0)なら、結果は(+∞,+0)です。 - z が
(-∞,y)(任意の有限 y)の場合、結果は+0cis(y)となります。 - z が
(+∞,y)(任意の有限非ゼロ y)の場合、結果は+∞cis(y)となります。 - z が
(-∞,+∞)の場合、結果は(±0,±0)(符号は不定)となります。 - z が
(+∞,+∞)の場合、結果は(±∞,NaN)となり、FE_INVALID が発生します(実数部の符号は不定)。 - z が
(-∞,NaN)の場合、結果は(±0,±0)(符号は不定)となります。 - z が
(+∞,NaN)の場合、結果は(±∞,NaN)(実数部の符号は不定)となります。 - もし z が
(NaN,+0)の場合、結果は(NaN,+0)です。 - z が
(NaN,y)(任意の非ゼロ y)の場合、結果は(NaN,NaN)となり、FE_INVALID が発生する場合があります。 - z が
(NaN,NaN)の場合、結果は(NaN,NaN)
ここで、cis(y) は cos(y) + i sin(y) です。
[編集] 注記
複素指数関数 ez
は、z = x+iy の場合、ex
cis(y)、すなわち ex
(cos(y) + i sin(y)) と等しくなります。
指数関数は複素平面における「整関数」であり、分岐切り込みを持ちません。
実数部が 0 である場合、以下のものは同等の結果になります。
- std::exp(std::complex<float>(0, theta))
- std::complex<float>(cosf(theta), sinf(theta))
- std::polar(1.f, theta)
この場合、exp は約 4.5 倍遅くなる可能性があります。実数部がリテラルの 0 である引数で exp を呼び出す代わりに、他の形式のいずれかを使用すべきです。ただし、z.real() == 0 を実行時チェックで回避しようとしても、メリットはありません。
[編集] 例
このコードを実行
#include <cmath> #include <complex> #include <iostream> int main() { const double pi = std::acos(-1.0); const std::complex<double> i(0.0, 1.0); std::cout << std::fixed << " exp(i * pi) = " << std::exp(i * pi) << '\n'; }
出力
exp(i * pi) = (-1.000000,0.000000)
[編集] 関連項目
| 複素数の自然対数、分枝切断は負の実軸に沿う (関数テンプレート) | |
| (C++11)(C++11) |
与えられたべき乗に累乗した e を返す (ex) (関数) |
| valarrayの各要素に関数std::expを適用する (function template) | |
| 大きさと偏角から複素数を構築する (関数テンプレート) | |
| C言語ドキュメント (
cexp) | |