最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

function
<limits>

# std::numeric_limits::epsilon

    // C++03
    static const T epsilon() throw();

    // C++11
    static constexpr T epsilon() noexcept;

## 概要

機械イプシロンを取得する。
これは浮動小数点数の比較のために誤差幅を評価するのに使用できる。

対応するマクロを次の表に挙げる。

型 | 対応するマクロ
--- | ---
`float` | `FLT_EPSILON`
`double` | `DBL_EPSILON`
`long double` | `LDBL_EPSILON`

## 例

    #include <iostream>
    #include <cmath>
    #include <limits>

    int main()
    {
      constexpr double e = std::numeric_limits<double>::epsilon();

      std::cout << e << std::endl;

      double a = 0.6 - 0.4;
      double b = 0.2;
      if (std::abs(a - b) <= e) {
        std::cout << "equal" << std::endl;
      }
      else {
        std::cout << "not equal" << std::endl;
      }
    }

### 出力

    2.22045e-016
    equal

## 参照

- C++ FAQ - Why doesn't my floating-point comparison work?
- Comparing Floating Point Numbers, 2012 Edition
- 浮動小数比較の落とし穴 - trinoの走り書き