Skip to content

Commit 486647f

Browse files
feat: std::absに表現不可能な値(INT_MIN等)を渡した際の未定義動作について追記 (#1600)
* feat: `std::abs`に表現不可能な値を渡した際の未定義動作について追記 * fix: 整数型に対するオーバーロードに限定 * feat: cmathのabsに対しても記述 * feat: 表記の改善
1 parent 9d5d7a5 commit 486647f

File tree

2 files changed

+4
-0
lines changed

2 files changed

+4
-0
lines changed

reference/cmath/abs.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ namespace std {
5050
5151
## 備考
5252
- $$ f(x) = | x | $$
53+
- (6), (7), (8) : 引数の絶対値が、戻り値の型で表現できない場合、未定義動作を引き起こす。
54+
- 一般的な2の補数表現のシステムにおいて、符号付き整数型の最小値(例:`int`における[`INT_MIN`](/reference/climits/int_min.md))の絶対値は、表現できる最大値([`INT_MAX`](/reference/climits/int_max.md))よりも1大きくなってしまうため、この未定義動作に該当する。
5355
- 任意の整数型に対するオーバーロード(5)は C++11 で追加されたが、[一部の符号なし整数型に対して問題を引き起こす](http://wg21.cmeerw.net/lwg/issue2192)ことから C++17 で削除され、符号付き整数型に対するオーバーロード(6), (7), (8)が追加された
5456
- C++23では、(1), (2), (3)が(4)に統合され、拡張浮動小数点数型を含む浮動小数点数型へのオーバーロードとして定義された
5557

reference/cstdlib/abs.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ namespace std {
6363
6464
6565
## 備考
66+
- (1), (2), (3), (8), (9) : 引数の絶対値が、戻り値の型で表現できない場合、未定義動作を引き起こす。
67+
- 一般的な2の補数表現のシステムにおいて、符号付き整数型の最小値(例:`int`における[`INT_MIN`](/reference/climits/int_min.md))の絶対値は、表現できる最大値([`INT_MAX`](/reference/climits/int_max.md))よりも1大きくなってしまうため、この未定義動作に該当する。
6668
- パラメータの型`X`において[`is_unsigned_v`](/reference/type_traits/is_unsigned.md)`<X>`が`true`であり、`X`が整数昇格によって`int`に変換できない場合、プログラムは不適格となる
6769
- Cとの互換性のため、`int`に昇格できる符号なし整数型は許可される
6870
- C++23では、(4), (5), (6)が(7)に統合され、拡張浮動小数点数型を含む浮動小数点数型へのオーバーロードとして定義された

0 commit comments

Comments
 (0)