最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<complex>

# std::abs

    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 +` 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` | 絶対値を得る。（整数版）

## 参照

- P1383R2 More constexpr for `<cmath>` and `<complex>`
  - C++26で`constexpr`対応した