最終更新日時:
が更新

履歴 編集

function template
<complex>

std::exp

namespace std {
  template <class T>
  complex<T> exp(const complex<T>& x);
}

概要

自然対数の底 e(ネイピア数)の複素数値による累乗を得る。exp は exponent(指数)、あるいは、exponential function(指数関数)の略。

戻り値

自然対数の底 e(ネイピア数)の引数 x による累乗。

備考

  • 規格には、上記の戻り値に記載されている以上の規定・説明は無い。
    なお、C99 の規格にある本関数と同等の関数群(complex.h ヘッダの cexpcexpfcexplの 3 つ。それぞれ C++ の exp<double>exp<float>exp<long double> に相当)では、処理系が ISO IEC 60559(IEEE 754 と同一)に準拠している場合、以下のように規定されている。
    • exp(conj(x)) = conj(exp(x))
    • exp(complex(±0, +0))complex(+1, +0) を返す。
    • 有限の x に対して、exp(complex(x, +∞))complex(NaN, NaN) を返し、無効演算の浮動小数点例外(FE_INVALID)を引き起こす。
    • 有限の x に対して、exp(complex(x, NaN))complex(NaN, NaN) を返し、無効演算の浮動小数点例外(FE_INVALID)を引き起こす可能性がある。
    • exp(complex(+∞, +0))complex(+∞, +0) を返す。
    • 有限の y に対して、exp(complex(-∞, y))+0 * complex(cos(y), sin(y)) を返す。
    • 有限で非ゼロの y に対して、exp(complex(+∞, y))+∞ * complex(cos(y), sin(y)) を返す。
    • exp(complex(-∞, +∞))complex(±0, ±0) を返す(結果の実部、および、虚部の符号は未規定)。
    • exp(complex(+∞, +∞))complex(±∞, NaN) を返し(結果の実部の符号は未規定)、無効演算の浮動小数点例外(FE_INVALID)を引き起こす。
    • exp(complex(-∞, NaN))complex(±0, ±0) を返す(結果の実部、および、虚部の符号は未規定)。
    • exp(complex(+∞, NaN))complex(±∞, NaN) を返す(結果の実部の符号は未規定)。
    • exp(complex(NaN, +0))complex(NaN, +0) を返す。
    • あらゆる非ゼロの y に対して、exp(complex(NaN, y))complex(NaN, NaN) を返し、無効演算の浮動小数点例外(FE_INVALID)を引き起こす可能性がある。
    • exp(complex(NaN, NaN))complex(NaN, NaN) を返す。
  • 処理系が ISO IEC 60559 に準拠しているかどうかは、C99 の場合はマクロ __STDC_IEC_559_COMPLEX__1 に定義されている事で判別可能であるが、C++ の規格書には該当する記載を見つける事ができなかった。
  • 自然対数の底 e(ネイピア数)の累乗の算出については、一部の算術型、および、valarray クラステンプレートに対しても、他のヘッダで定義されている。

    引数の型 関数 ヘッダ 備考
    float exp cmath
    double exp cmath
    long double exp cmath
    任意の整数型 exp cmath C++11 から
    valarray<T> exp valarray

#include <iostream>
#include <complex>

int main()
{
  std::complex<double> c(1.0, 2.0);

  std::complex<double> result = std::exp(c);
  std::cout << "exp( " << c << " ) = " << result << std::endl;
}

出力

exp( (1,2) ) = (-1.1312,2.47173)

バージョン

言語

  • C++98

処理系

  • Clang: 3.0, 3.1, 3.2, 3.3, 3.4
  • GCC: 4.3.6, 4.4.7, 4.5.4, 4.6.4, 4.7.3, 4.8.1, 4.8.2, 4.9.0
  • ICC: ??
  • Visual C++: ??

備考

  • libstdc++ では、通常 glibc の対応する関数を呼び出すため、上記の備考に記載した C99 の ISO IEC 60559 準拠要件を満たす。
    しかし、glibc を使用していない libstdc++、および、libc++ は、当該要件を満たしていない(満たすつもりが無い?)ようである。
  • libstdc++ で glibc を使用している場合、使用している glibc のバージョンが 2.19 より前の場合には exp(complex(NaN, +0)) に対して complex(NaN, NaN) を返す。これは glibc のバグで 2.19 以降は直っている。

参照

acos 複素数の逆余弦を求める。
asin 複素数の逆正弦を求める。
atan 複素数の逆正接を求める。
acosh 複素数の双曲線逆余弦を求める。
asinh 複素数の双曲線逆正弦を求める。
atanh 複素数の双曲線逆正接を求める。
cos 複素数の余弦を求める。
cosh 複素数の双曲線余弦を求める。
log 複素数の自然対数を求める。
log10 複素数の常用対数を求める。
pow 複素数の累乗を求める。
sin 複素数の正弦を求める。
sinh 複素数の双曲線正弦を求める。
sqrt 複素数の平方根を求める。
tan 複素数の正接を求める。
tanh 複素数の双曲線正接を求める。
exp 自然対数の底 e の累乗(実数)を求める。