• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    macro
    <cfloat>

    FLT_DIG

    # define FLT_DIG implementation-defined
    

    概要

    float で正確に表現可能な10進数の最大の桁数を表すマクロ。
    より正確には、n 桁の10進数を float に変換し、また元に戻した場合に値が変わらないような n のうち最大のもの。
    以下の式で表される。

    {plog10bもし b が 10 の累乗の場合(p1)log10b上記以外の場合

    ここで、b は指数表現の基数(FLT_RADIX)、p は精度(基数 b での仮数部の桁数、FLT_MANT_DIG)である。
    bp については <cfloat> のモデルも参照。

    std::numeric_limits<float>::digits10 と等しい。

    備考

    • 規格で 6 以上であることが規定されている。
    • 本マクロは #if プリプロセッサディレクティブに使用可能な定数式である。
    • FLT_DIG は FLoaT DIGits(digit:桁)に由来する。

    #include <iostream>
    #include <cfloat>
    #include <cmath>
    
    int main()
    {
      std::cout << FLT_DIG << '\n';
    
      // 以下の式と等価
      double log10b = std::log10(FLT_RADIX);
      double intpart;
      if (std::modf(log10b, &intpart) == 0.0) {
        std::cout << FLT_MANT_DIG * log10b << '\n';
      } else {
        std::cout << std::floor((FLT_MANT_DIG - 1) * log10b) << '\n';
      }
    }
    

    出力例

    6
    6