最終更新日時: 2025年09月18日 17時32分28秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<cmath>

# std::fminimum_num(C++26)

    namespace std {
      constexpr floating-point-type
        fminimum_num(floating-point-type x,
                     floating-point-type y); // (1) C++26

      constexpr Promoted
        fminimum_num(Arithmetic1 x,
                     Arithmetic2 y);         // (2) C++26
    }

## 概要

浮動小数点数型の最小値を求める。

- (1) : 浮動小数点数型に対するオーバーロード
- (2) : 算術型に対するオーバーロード (大きい精度にキャストして計算される。整数は`double`で計算される)

同じ目的のほかの関数との比較は以下。

関数名 | -0.0 と +0.0 の比較 | NaN を含む場合の挙動 | 備考
--- | --- | --- | ---
`fmin` | 未規定 | NaN でない方を返す |
`fminimum` | -0.0 を返す | NaN を返す | エラー伝播を優先
`fminimum_num` | -0.0 を返す | NaN でない方を返す | 数値を優先

## 戻り値

引数の最小値を返す。

## 備考

- 戻り値は正確で、現在の丸めモードに依存しない。
- 処理系が IEC 60559 に準拠している場合（`std::numeric_limits<T>::is_iec559() != false`）、以下の規定が追加される。
  - 引数の1つが NaN の場合 NaN でない方を返す。
  - 引数が2つとも NaN の場合 NaN を返す。
- `-0.0`と`+0.0`の比較では、`-0.0`を返す。
- IEEE 754 の `minimumNum` に対応する。

## 例

    #include <print>
    #include <cmath>

    int main() {
      std::println("fminimum_num( 0.0, -1.0) = {:+}", std::fminimum_num(0.0, -1.0));
      std::println("fminimum_num(-0.0, +0.0) = {:+}", std::fminimum_num(-0.0, +0.0));
      std::println("fminimum_num( 0.0, +1.0) = {:+}", std::fminimum_num(0.0, +1.0));
      std::println("fminimum_num( 0.0, nan)  = {:+}", std::fminimum_num(0.0, std::nan("")));
      std::println("fminimum_num( nan, nan)  = {:+}", std::fminimum_num(std::nan(""), std::nan("")));
    }

### 出力例

    fminimum_num( 0.0, -1.0) = -1
    fminimum_num(-0.0, +0.0) = -0
    fminimum_num( 0.0, +1.0) = +0
    fminimum_num( 0.0, nan)  = +0
    fminimum_num( nan, nan)  = +nan

## バージョン

### 言語

- C++26

### 処理系

- Clang: 21.0 ❌
- GCC: 15 ❌
- Visual C++: 2022 Update 14 ❌

## 関連項目

- `fmin`
- `fminimum`

## 参照

- P3008R6 Atomic floating-point min/max