namespace std {
template <class T>
T
abs(const complex<T>& x); // (1) C++03
template <class T>
constexpr T
abs(const complex<T>& x); // (1) C++26
}
概要
複素数値の絶対値(大きさ・マグニチュード)を得る。abs は absolute value(絶対値)の略。
戻り値
引数 x
の絶対値(大きさ・マグニチュード)
備考
- 規格には、本関数に関する具体的な規定・説明は無い。
なお、C99 の規格にある本関数と等価の関数群(complex.h
ヘッダのcabs
、cabsf
、cabsl
の 3 つ。それぞれ C++ のabs<double>
、abs<float>
、abs<long double>
に相当)では、処理系が ISO IEC 60559(IEEE 754 と同一)に準拠している(マクロ__STDC_IEC_559_COMPLEX__
が1
に定義されている)場合、abs(x +
iy) = 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 |
絶対値を得る。(整数版) |
参照
- P1383R2 More constexpr for
<cmath>
and<complex>
- C++26で
constexpr
対応した
- C++26で