• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    macro
    <cfloat>

    LDBL_MIN_EXP

    # define LDBL_MIN_EXP implementation-defined
    

    概要

    FLT_RADIX の $n - 1$ 乗が、long double の正規化数として表現可能であるような、最小の整数値 $n$ を表すマクロ。
    <cfloat> のモデルにおける $e_{\rm min}$。

    std::numeric_limits<long double>::min_exponent と等しい。

    備考

    • 本マクロは #if プリプロセッサディレクティブに使用可能な定数式である。
    • LDBL_MIN_EXP は Long DouBLe MINimum EXPonent(minimum:最小値、exponent:指数)に由来する。

    #include <iostream>
    #include <iomanip>
    #include <cfloat>
    #include <cmath>
    
    int main()
    {
      std::cout << LDBL_MIN_EXP << '\n';
    
      std::cout << std::setprecision(LDBL_DIG) << std::boolalpha;
    
      // long double の正規化数として表現可能
      long double ld1 = std::pow((long double)FLT_RADIX, LDBL_MIN_EXP - 1);
      std::cout << ld1 << ", " << std::isnormal(ld1) << '\n';
    
      // long double の正規化数として表現不可能
      long double ld2 = std::pow((long double)FLT_RADIX, LDBL_MIN_EXP - 2);
      std::cout << ld2 << ", " << std::isnormal(ld2) << '\n';
    }
    

    出力例

    -16381
    3.36210314311209351e-4932, true
    1.68105157155604675e-4932, false