最終更新日時:
が更新

履歴 編集

function template
<complex>

std::abs

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

概要

複素数値の絶対値(大きさ・マグニチュード)を得る。abs は absolute value(絶対値)の略。

戻り値

引数 x の絶対値(大きさ・マグニチュード)

備考

  • 規格には、本関数に関する具体的な規定・説明は無い。
    なお、C99 の規格にある本関数と同等の関数群(complex.h ヘッダの cabscabsfcabsl の 3 つ。それぞれ C++ の abs<double>abs<float>abs<long double> に相当)では、処理系が ISO IEC 60559(IEEE 754 と同一)に準拠している(マクロ __STDC_IEC_559_COMPLEX__1 に定義されている)場合、abs(x + i y) = hypot(x, y) と規定されている(i は虚数単位)。
  • 処理系が ISO IEC 60559 に準拠しているかどうかは、C99 の場合はマクロ __STDC_IEC_559_COMPLEX__1 に定義されている事で判別可能であるが、C++ の規格書には該当する記載を見つける事ができなかった。
  • 絶対値の算出については、一部の算術型、および、valarray クラステンプレートに対しても、他のヘッダで定義されている。

    引数の型 関数 ヘッダ 備考
    float abs cmath
    fabs cmath
    double abs cmath
    fabs cmath
    long double abs cmath
    fabs cmath
    任意の整数型 abs cmath C++11 から
    fabs cmath C++11 から
    int abs cstdlib
    long int labs cstdlib
    abs cstdlib
    long long int llabs cstdlib C++11 から
    abs cstdlib C++11 から
    valarray<T> abs valarray

    なお、上記のうち、任意の整数型に対する abs については C++11 で追加されたが、ある種の問題を引き起こすことから、今後削除される可能性がある。Validity and return type of std::abs(0u) is unclear 参照。
    また、浮動小数点版、および、整数版の abs については今後、全て cmath cstdlib 両方のヘッダで利用できるようになるかもしれない。\<cstdlib> should declare abs(double) 参照。

#include <iostream>
#include <complex>

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

  double result = std::abs(c);
  std::cout << "abs( " << c << " ) = " << result << std::endl;
}

出力

abs( (1,2) ) = 2.23607

バージョン

言語

  • 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++: ??

参照

real 複素数の実部を得る。
imag 複素数の虚部を得る。
arg 複素数の偏角を得る。
norm 複素数体のノルムを得る。
conj 共役複素数を得る。
proj リーマン球面への射影を得る。
polar 指定した絶対値と偏角の複素数値を得る。
abs 絶対値を得る。(浮動小数点版)
fabs 絶対値を得る。(浮動小数点版)
abs 絶対値を得る。(整数版)