diff --git a/reference/cmath/abs.md b/reference/cmath/abs.md index 2fd23a2317..8ae5febb3b 100644 --- a/reference/cmath/abs.md +++ b/reference/cmath/abs.md @@ -45,7 +45,7 @@ namespace std { ## 戻り値 引数 `x` の絶対値を返す。 -- (1),(2),(3) : `x` が `±∞` だった場合 `+∞` を返す。 +- (1),(2),(3),(4) : `x` が `±∞` だった場合 `+∞` を返す。 ## 備考 diff --git a/reference/complex/complex/abs.md b/reference/complex/complex/abs.md index cf7686b0e0..69f779ae0c 100644 --- a/reference/complex/complex/abs.md +++ b/reference/complex/complex/abs.md @@ -24,21 +24,21 @@ namespace std { - 処理系が ISO IEC 60559 に準拠しているかどうかは、C99 の場合はマクロ `__STDC_IEC_559_COMPLEX__` が `1` に定義されている事で判別可能であるが、C++ の規格書には該当する記載を見つける事ができなかった。 - 絶対値の算出については、一部の算術型、および、[`valarray`](/reference/valarray/valarray.md) クラステンプレートに対しても、他のヘッダで定義されている。 - | 引数の型 | 関数 | ヘッダ | 備考 | - |----------------------------------------------------|-----------------------------------------------|--------------------------------------|------------| - | `float` | [`abs`](/reference/cmath/abs.md) | [`cmath`](/reference/cmath.md) | | - | | [`fabs`](/reference/cmath/fabs.md) | [`cmath`](/reference/cmath.md) | | - | `double` | [`abs`](/reference/cmath/abs.md) | [`cmath`](/reference/cmath.md) | | - | | [`fabs`](/reference/cmath/fabs.md) | [`cmath`](/reference/cmath.md) | | - | `long double` | [`abs`](/reference/cmath/abs.md) | [`cmath`](/reference/cmath.md) | | - | | [`fabs`](/reference/cmath/fabs.md) | [`cmath`](/reference/cmath.md) | | - | 任意の整数型 | [`abs`](/reference/cmath/abs.md) | [`cmath`](/reference/cmath.md) | C++11 から | - | | [`fabs`](/reference/cmath/fabs.md) | [`cmath`](/reference/cmath.md) | C++11 から | - | `int` | [`abs`](/reference/cstdlib/abs.md.nolink) | [`cstdlib`](/reference/cstdlib.md) | | - | `long int` | [`labs`](/reference/cstdlib/labs.md.nolink) | [`cstdlib`](/reference/cstdlib.md) | | - | | [`abs`](/reference/cstdlib/abs.md.nolink) | [`cstdlib`](/reference/cstdlib.md) | | - | `long long int` | [`llabs`](/reference/cstdlib/llabs.md.nolink) | [`cstdlib`](/reference/cstdlib.md) | C++11 から | - | | [`abs`](/reference/cstdlib/abs.md.nolink) | [`cstdlib`](/reference/cstdlib.md) | C++11 から | + | 引数の型 | 関数 | ヘッダ | 備考 | + |----------------------------------------------------|--------------------------------------|--------------------------------------|------------| + | `float` | [`abs`](/reference/cmath/abs.md) | [`cmath`](/reference/cmath.md) | | + | | [`fabs`](/reference/cmath/fabs.md) | [`cmath`](/reference/cmath.md) | | + | `double` | [`abs`](/reference/cmath/abs.md) | [`cmath`](/reference/cmath.md) | | + | | [`fabs`](/reference/cmath/fabs.md) | [`cmath`](/reference/cmath.md) | | + | `long double` | [`abs`](/reference/cmath/abs.md) | [`cmath`](/reference/cmath.md) | | + | | [`fabs`](/reference/cmath/fabs.md) | [`cmath`](/reference/cmath.md) | | + | 任意の整数型 | [`abs`](/reference/cmath/abs.md) | [`cmath`](/reference/cmath.md) | C++11 から | + | | [`fabs`](/reference/cmath/fabs.md) | [`cmath`](/reference/cmath.md) | C++11 から | + | `int` | [`abs`](/reference/cstdlib/abs.md) | [`cstdlib`](/reference/cstdlib.md) | | + | `long int` | [`labs`](/reference/cstdlib/abs.md) | [`cstdlib`](/reference/cstdlib.md) | | + | | [`abs`](/reference/cstdlib/abs.md) | [`cstdlib`](/reference/cstdlib.md) | | + | `long long int` | [`llabs`](/reference/cstdlib/abs.md) | [`cstdlib`](/reference/cstdlib.md) | C++11 から | + | | [`abs`](/reference/cstdlib/abs.md) | [`cstdlib`](/reference/cstdlib.md) | C++11 から | | [`valarray`](/reference/valarray/valarray.md)`` | [`abs`](/reference/valarray/valarray/abs.md) | [`valarray`](/reference/valarray.md) | | なお、上記のうち、任意の整数型に対する [`abs`](/reference/cmath/abs.md) については C++11 で追加されたが、ある種の問題を引き起こすことから、今後削除される可能性がある。[Validity and return type of std::abs(0u) is unclear](http://wg21.cmeerw.net/lwg/issue2192) 参照。 @@ -89,4 +89,4 @@ abs( (1,2) ) = 2.23607 | [`polar`](polar.md) | 指定した絶対値と偏角の複素数値を得る。 | | [`abs`](/reference/cmath/abs.md) | 絶対値を得る。(浮動小数点版) | | [`fabs`](/reference/cmath/fabs.md) | 絶対値を得る。(浮動小数点版) | -| [`abs`](/reference/cstdlib/abs.md.nolink) | 絶対値を得る。(整数版) | +| [`abs`](/reference/cstdlib/abs.md) | 絶対値を得る。(整数版) | diff --git a/reference/cstdlib.md b/reference/cstdlib.md index c35a95d5a6..2c80d8488d 100644 --- a/reference/cstdlib.md +++ b/reference/cstdlib.md @@ -80,9 +80,9 @@ | 名前 | 説明 | 対応バージョン | |------|------|----------------| -| `abs` | `int`の絶対値を取得する (function) | | -| `labs` | `long`の絶対値を取得する (function) | | -| `llabs` | `long long`の絶対値を取得する (function) | C++11 | +| [`abs`](cstdlib/abs.md) | `int`の絶対値を取得する (function) | | +| [`labs`](cstdlib/abs.md) | `long`の絶対値を取得する (function) | | +| [`llabs`](cstdlib/abs.md) | `long long`の絶対値を取得する (function) | C++11 | | `div_t` | `div`関数の戻り値型 (class) | | | `div` | `int`の除算を行う (function) | | | `ldiv_t` | `div`関数の戻り値型 (class) | | diff --git a/reference/cstdlib/abs.md b/reference/cstdlib/abs.md new file mode 100644 index 0000000000..ad61f0b6aa --- /dev/null +++ b/reference/cstdlib/abs.md @@ -0,0 +1,100 @@ +# abs +* cstdlib[meta header] +* std[meta namespace] +* function[meta id-type] + +```cpp +namespace std { + int + abs(int j); // (1) C++03 + constexpr int + abs(int j); // (1) C++23 + + long + int abs(long j); // (2) C++03 + constexpr long + int abs(long j); // (2) C++23 + + long long + abs(long long j); // (3) C++11 + constexpr long long + abs(long long j); // (3) C++23 + + float + abs(float j); // (4) C++03からC++20まで + double + abs(double j); // (5) C++03からC++20まで + long double + abs(long double j); // (6) C++03からC++20まで + + floating-point-type + abs(floating-point-type j); // (7) C++03からC++20まで + + long + labs(long j); // (8) C++03 + constexpr long + labs(long j); // (8) C++23 + + long long + llabs(long long j); // (9) C++11 + constexpr long long + llabs(long long j); // (9) C++23 +} +``` + +## 概要 +絶対値を求める。abs は absolute value(絶対値)の略。 + +- (1) : `int`に対するオーバーロード +- (2) : `long`に対するオーバーロード +- (3) : `long long`に対するオーバーロード +- (4) : `float`に対するオーバーロード +- (5) : `double`に対するオーバーロード +- (6) : `long double`に対するオーバーロード +- (7) : 浮動小数点数型に対するオーバーロード +- (8) : `long`規定 +- (9) : `long long`規定 + + +## 戻り値 +引数 `j` の絶対値を返す。 + +- (4),(5),(6),(7) : `j` が `±∞` だった場合 `+∞` を返す。 + + +## 備考 +- パラメータの型`X`において[`is_unsigned_v`](/reference/type_traits/is_unsigned.md)``が`true`であり、`X`が整数昇格によって`int`に変換できない場合、プログラムは不適格となる + - Cとの互換性のため、`int`に昇格できる符号なし整数型は許可される +- C++23では、(4)、(5)、(6)が(7)に統合され、拡張浮動小数点数型を含む浮動小数点数型へのオーバーロードとして定義された + + +## 例 +```cpp example +#include +#include + +int main() +{ + int x = std::abs(-1); + std::cout << x << std::endl; +} +``` +* std::abs[color ff0000] + +### 出力 +``` +1 +``` + + +### 備考 +特定の環境では、早期に `constexpr` 対応されている場合がある: + +- GCC 4.6.1 以上 + + +## 参照 +- [P0533R9 constexpr for `` and ``](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0533r9.pdf) + - C++23での、一部関数の`constexpr`対応 +- [P1467R9 Extended floating-point types and standard names](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1467r9.html) + - C++23で導入された拡張浮動小数点数型への対応として、`float`、`double`、`long double`のオーバーロードを`floating-point-type`のオーバーロードに統合し、拡張浮動小数点数型も扱えるようにした