Skip to content

Commit 8d46680

Browse files
committed
atomic(_ref) : C++26対応として浮動小数点数のfmax / fmin関連を追加 #1514
1 parent 911f1dc commit 8d46680

15 files changed

+665
-48
lines changed

lang/cpp26.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -292,10 +292,10 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通
292292
- メンバ関数
293293
- [`fetch_max()`](/reference/atomic/atomic/fetch_max.md)
294294
- [`fetch_min()`](/reference/atomic/atomic/fetch_min.md)
295-
- [`fetch_fmaximum()`](/reference/atomic/atomic/fetch_fmaximum.md.nolink) (浮動小数点数用)
296-
- [`fetch_fminimum()`](/reference/atomic/atomic/fetch_fminimum.md.nolink) (浮動小数点数用)
297-
- [`fetch_fmaximum_num()`](/reference/atomic/atomic/fetch_fmaximum_num.md.nolink) (浮動小数点数用)
298-
- [`fetch_fminimum_num()`](/reference/atomic/atomic/fetch_fminimum_num.md.nolink) (浮動小数点数用)
295+
- [`fetch_fmaximum()`](/reference/atomic/atomic/fetch_fmaximum.md) (浮動小数点数用)
296+
- [`fetch_fminimum()`](/reference/atomic/atomic/fetch_fminimum.md) (浮動小数点数用)
297+
- [`fetch_fmaximum_num()`](/reference/atomic/atomic/fetch_fmaximum_num.md) (浮動小数点数用)
298+
- [`fetch_fminimum_num()`](/reference/atomic/atomic/fetch_fminimum_num.md) (浮動小数点数用)
299299
- 非メンバ関数として
300300
- [`std::atomic_fetch_max()`](/reference/atomic/atomic_fetch_max.md)
301301
- [`std::atomic_fetch_max_explicit()`](/reference/atomic/atomic_fetch_max_explicit.md)

reference/atomic/atomic.md

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ namespace std {
162162
| [`fetch_and`](atomic/fetch_and.md) | AND演算 | C++11 |
163163
| [`fetch_or`](atomic/fetch_or.md) | OR演算 | C++11 |
164164
| [`fetch_xor`](atomic/fetch_xor.md) | XOR演算 | C++11 |
165-
| [`fetch_max`](atomic/fetch_max.md) | 最大値取得 | C++26 |
166-
| [`fetch_min`](atomic/fetch_min.md) | 最小値取得 | C++26 |
165+
| [`fetch_max`](atomic/fetch_max.md) | 最大値を設定・取得 | C++26 |
166+
| [`fetch_min`](atomic/fetch_min.md) | 最小値を設定・取得 | C++26 |
167167
| [`operator++`](atomic/op_increment.md) | インクリメント | C++11 |
168168
| [`operator--`](atomic/op_decrement.md) | デクリメント | C++11 |
169169
| [`operator+=`](atomic/op_plus_assign.md) | 加算 | C++11 |
@@ -184,10 +184,16 @@ namespace std {
184184
185185
| 名前 | 説明 | 対応バージョン |
186186
|------|------|----------------|
187-
| [`fetch_add`](atomic/fetch_add.md) | 加算 | C++20 |
188-
| [`fetch_sub`](atomic/fetch_sub.md) | 減算 | C++20 |
189-
| [`operator+=`](atomic/op_plus_assign.md) | 加算 | C++20 |
190-
| [`operator-=`](atomic/op_minus_assign.md) | 減算 | C++20 |
187+
| [`fetch_add`](atomic/fetch_add.md) | 加算 | C++20 |
188+
| [`fetch_sub`](atomic/fetch_sub.md) | 減算 | C++20 |
189+
| [`fetch_max`](atomic/fetch_max.md) | 最大値を設定・取得 | C++26 |
190+
| [`fetch_min`](atomic/fetch_min.md) | 最小値を設定・取得 | C++26 |
191+
| [`fetch_fmaximum`](atomic/fetch_fmaximum.md) | 最大値を設定・取得 (`-0.0`と`+0.0`では`+0.0`、NaNと値ではNaNを返す) | C++26 |
192+
| [`fetch_fminimum`](atomic/fetch_fminimum.md) | 最小値を設定・取得 (`-0.0`と`+0.0`では`-0.0`、NaNと値ではNaNを返す) | C++26 |
193+
| [`fetch_fmaximum_num`](atomic/fetch_fmaximum_num.md) | 最大値を設定・取得 (`-0.0`と`+0.0`では`+0.0`、NaNと値では数値を返す) | C++26 |
194+
| [`fetch_fminimum_num`](atomic/fetch_fminimum_num.md) | 最小値を設定・取得 (`-0.0`と`+0.0`では`-0.0`、NaNと値では数値を返す) | C++26 |
195+
| [`operator+=`](atomic/op_plus_assign.md) | 加算 | C++20 |
196+
| [`operator-=`](atomic/op_minus_assign.md) | 減算 | C++20 |
191197
192198
193199
### atomic<floating-point>専用メンバ型
@@ -203,8 +209,8 @@ namespace std {
203209
|------|------|----------------|
204210
| [`fetch_add`](atomic/fetch_add.md) | 加算 | C++11 |
205211
| [`fetch_sub`](atomic/fetch_sub.md) | 減算 | C++11 |
206-
| [`fetch_max`](atomic/fetch_max.md) | 最大値取得 | C++26 |
207-
| [`fetch_min`](atomic/fetch_min.md) | 最小値取得 | C++26 |
212+
| [`fetch_max`](atomic/fetch_max.md) | 最大値を設定・取得 | C++26 |
213+
| [`fetch_min`](atomic/fetch_min.md) | 最小値を設定・取得 | C++26 |
208214
| [`operator++`](atomic/op_increment.md) | インクリメント | C++11 |
209215
| [`operator--`](atomic/op_decrement.md) | デクリメント | C++11 |
210216
| [`operator+=`](atomic/op_plus_assign.md) | 加算 | C++11 |
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# fetch_fmaximum
2+
* atomic[meta header]
3+
* std[meta namespace]
4+
* atomic[meta class]
5+
* function[meta id-type]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
constexpr T
10+
fetch_fmaximum(difference_type operand,
11+
memory_order order = memory_order_seq_cst
12+
) const noexcept; // (1) C++26
13+
```
14+
* memory_order[link /reference/atomic/memory_order.md]
15+
* memory_order_seq_cst[link /reference/atomic/memory_order.md]
16+
17+
## 概要
18+
最大値を設定・取得する。
19+
20+
この関数は、`*this`が保持する値と`operand`の大きい方を求め、その値を`this`に保持させた上でその値を返す。
21+
22+
23+
## 効果
24+
`order`で指定されたメモリオーダーにしたがって、`*this`が保持する値と`operand`の最大値を求めて、その値を`this`に保持させ、その値を返す
25+
26+
27+
## 例外
28+
投げない
29+
30+
31+
## 備考
32+
- この関数は、`atomic`クラスの浮動小数点数型に対する特殊化で定義される
33+
- 浮動小数点数型
34+
- [`std::fmaximum()`](/reference/cmath/fmaximum.md)関数と同様の動作をする
35+
36+
37+
## 例
38+
```cpp example
39+
#include <iostream>
40+
#include <atomic>
41+
42+
int main()
43+
{
44+
std::atomic<int> x(2);
45+
46+
int ret = x.fetch_fmaximum(3);
47+
48+
std::cout << ret << std::endl;
49+
std::cout << x.load() << std::endl;
50+
}
51+
```
52+
* fetch_fmaximum[color ff0000]
53+
* load()[link load.md]
54+
55+
### 出力
56+
```
57+
3
58+
3
59+
```
60+
61+
## バージョン
62+
### 言語
63+
- C++26
64+
65+
### 処理系
66+
- [Clang](/implementation.md#clang): 21 [mark noimpl]
67+
- [GCC](/implementation.md#gcc): 15 [mark noimpl]
68+
69+
70+
## 参照
71+
- [P3008R6 Atomic floating-point min/max](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3008r6.html)
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# fetch_fmaximum_num
2+
* atomic[meta header]
3+
* std[meta namespace]
4+
* atomic[meta class]
5+
* function[meta id-type]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
constexpr T
10+
fetch_fmaximum_num(difference_type operand,
11+
memory_order order = memory_order_seq_cst
12+
) const noexcept; // (1) C++26
13+
```
14+
* memory_order[link /reference/atomic/memory_order.md]
15+
* memory_order_seq_cst[link /reference/atomic/memory_order.md]
16+
17+
## 概要
18+
最大値を設定・取得する。
19+
20+
この関数は、`*this`が保持する値と`operand`の大きい方を求め、その値を`this`に保持させた上でその値を返す。
21+
22+
23+
## 効果
24+
`order`で指定されたメモリオーダーにしたがって、`*this`が保持する値と`operand`の最大値を求めて、その値を`this`に保持させ、その値を返す
25+
26+
27+
## 例外
28+
投げない
29+
30+
31+
## 備考
32+
- この関数は、`atomic`クラスの浮動小数点数型に対する特殊化で定義される
33+
- 浮動小数点数型
34+
- [`std::fmaximum_num()`](/reference/cmath/fmaximum_num.md)関数と同様の動作をする
35+
36+
37+
## 例
38+
```cpp example
39+
#include <iostream>
40+
#include <atomic>
41+
42+
int main()
43+
{
44+
std::atomic<int> x(2);
45+
46+
int ret = x.fetch_fmaximum_num(3);
47+
48+
std::cout << ret << std::endl;
49+
std::cout << x.load() << std::endl;
50+
}
51+
```
52+
* fetch_fmaximum_num[color ff0000]
53+
* load()[link load.md]
54+
55+
### 出力
56+
```
57+
3
58+
3
59+
```
60+
61+
## バージョン
62+
### 言語
63+
- C++26
64+
65+
### 処理系
66+
- [Clang](/implementation.md#clang): 21 [mark noimpl]
67+
- [GCC](/implementation.md#gcc): 15 [mark noimpl]
68+
69+
70+
## 参照
71+
- [P3008R6 Atomic floating-point min/max](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3008r6.html)
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# fetch_fminimum
2+
* atomic[meta header]
3+
* std[meta namespace]
4+
* atomic[meta class]
5+
* function[meta id-type]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
constexpr T
10+
fetch_fminimum(difference_type operand,
11+
memory_order order = memory_order_seq_cst
12+
) const noexcept; // (1) C++26
13+
```
14+
* memory_order[link /reference/atomic/memory_order.md]
15+
* memory_order_seq_cst[link /reference/atomic/memory_order.md]
16+
17+
## 概要
18+
最小値を設定・取得する。
19+
20+
この関数は、`*this`が保持する値と`operand`の小さい方を求め、その値を`this`に保持させた上でその値を返す。
21+
22+
23+
## 効果
24+
`order`で指定されたメモリオーダーにしたがって、`*this`が保持する値と`operand`の最小値を求めて、その値を`this`に保持させ、その値を返す
25+
26+
27+
## 例外
28+
投げない
29+
30+
31+
## 備考
32+
- この関数は、`atomic`クラスの浮動小数点数型に対する特殊化で定義される
33+
- 浮動小数点数型
34+
- [`std::fminimum()`](/reference/cmath/fminimum.md)関数と同様の動作をする
35+
36+
37+
## 例
38+
```cpp example
39+
#include <iostream>
40+
#include <atomic>
41+
42+
int main()
43+
{
44+
std::atomic<int> x(3);
45+
46+
int ret = x.fetch_fminimum(2);
47+
48+
std::cout << ret << std::endl;
49+
std::cout << x.load() << std::endl;
50+
}
51+
```
52+
* fetch_fminimum[color ff0000]
53+
* load()[link load.md]
54+
55+
### 出力
56+
```
57+
2
58+
2
59+
```
60+
61+
## バージョン
62+
### 言語
63+
- C++26
64+
65+
### 処理系
66+
- [Clang](/implementation.md#clang): 21 [mark noimpl]
67+
- [GCC](/implementation.md#gcc): 15 [mark noimpl]
68+
69+
70+
## 参照
71+
- [P3008R6 Atomic floating-point min/max](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3008r6.html)
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# fetch_fminimum_num
2+
* atomic[meta header]
3+
* std[meta namespace]
4+
* atomic[meta class]
5+
* function[meta id-type]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
constexpr T
10+
fetch_fminimum_num(difference_type operand,
11+
memory_order order = memory_order_seq_cst
12+
) const noexcept; // (1) C++26
13+
```
14+
* memory_order[link /reference/atomic/memory_order.md]
15+
* memory_order_seq_cst[link /reference/atomic/memory_order.md]
16+
17+
## 概要
18+
最小値を設定・取得する。
19+
20+
この関数は、`*this`が保持する値と`operand`の小さい方を求め、その値を`this`に保持させた上でその値を返す。
21+
22+
23+
## 効果
24+
`order`で指定されたメモリオーダーにしたがって、`*this`が保持する値と`operand`の最小値を求めて、その値を`this`に保持させ、その値を返す
25+
26+
27+
## 例外
28+
投げない
29+
30+
31+
## 備考
32+
- この関数は、`atomic`クラスの浮動小数点数型に対する特殊化で定義される
33+
- 浮動小数点数型
34+
- [`std::fminimum_num()`](/reference/cmath/fminimum_num.md)関数と同様の動作をする
35+
36+
37+
## 例
38+
```cpp example
39+
#include <iostream>
40+
#include <atomic>
41+
42+
int main()
43+
{
44+
std::atomic<int> x(3);
45+
46+
int ret = x.fetch_fminimum_num(2);
47+
48+
std::cout << ret << std::endl;
49+
std::cout << x.load() << std::endl;
50+
}
51+
```
52+
* fetch_fminimum_num[color ff0000]
53+
* load()[link load.md]
54+
55+
### 出力
56+
```
57+
2
58+
2
59+
```
60+
61+
## バージョン
62+
### 言語
63+
- C++26
64+
65+
### 処理系
66+
- [Clang](/implementation.md#clang): 21 [mark noimpl]
67+
- [GCC](/implementation.md#gcc): 15 [mark noimpl]
68+
69+
70+
## 参照
71+
- [P3008R6 Atomic floating-point min/max](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3008r6.html)

0 commit comments

Comments
 (0)