当前头文件是语言支持库(Language support library)中的 类型支持 主题中的部分内容。

语言支持库(参考手册) ​语言支持库(标准)

  • numeric_limits 为查询基础数值类型(Fundamental numeric type)的属性而提供的接口
    float_round_style 表明浮点数类型的舍入(Rounding)模式
    float_denorm_style 表明浮点数类型的反规格化(Denormalization)模式
  • namespace std {
        template<class T> class numeric_limits;
     
        enum float_round_style {
            round_indeterminate         = -1,
            round_toward_zero           =  0,
            round_to_nearest            =  1,
            round_toward_infinity       =  2,
            round_toward_neg_infinity   =  3,
        };
     
        enum float_denorm_style {
            denorm_indeterminate = -1,
            denorm_absent        =  0,
            denorm_present       =  1
        };
     
     
        template<> class numeric_limits<bool>;
     
        template<> class numeric_limits<char>;
        template<> class numeric_limits<signed char>;
        template<> class numeric_limits<unsigned char>;
        template<> class numeric_limits<char16_t>;
        template<> class numeric_limits<char32_t>;
        template<> class numeric_limits<wchar_t>;
     
        template<> class numeric_limits<short>;
        template<> class numeric_limits<int>;
        template<> class numeric_limits<long>;
        template<> class numeric_limits<long long>;
        template<> class numeric_limits<unsigned short>;
        template<> class numeric_limits<unsigned int>;
        template<> class numeric_limits<unsigned long>;
        template<> class numeric_limits<unsigned long long>;
     
        template<> class numeric_limits<float>;
        template<> class numeric_limits<double>;
        template<> class numeric_limits<long double>;
    }
  • template<class T> class numeric_limits {
    public:
        static constexpr bool is_specialized = false;
     
        static constexpr T min() noexcept { return T(); }
        static constexpr T max() noexcept { return T(); }
        static constexpr T lowest() noexcept { return T(); }
     
        static constexpr int digits = 0;
        static constexpr int digits10 = 0;
        static constexpr int max_digits10 = 0;
     
        static constexpr bool is_signed = false;
        static constexpr bool is_integer = false;
        static constexpr bool is_exact = false;
        static constexpr int radix = 0;
        static constexpr T epsilon() noexcept { return T(); }
        static constexpr T round_error() noexcept { return T(); }
     
        static constexpr int min_exponent = 0;
        static constexpr int min_exponent10 = 0;
        static constexpr int max_exponent = 0;
        static constexpr int max_exponent10 = 0;
     
        static constexpr bool has_infinity = false;
        static constexpr bool has_quiet_NaN = false;
        static constexpr bool has_signaling_NaN = false;
        static constexpr float_denorm_style has_denorm = denorm_absent;
        static constexpr bool has_denorm_loss = false;
        static constexpr T infinity() noexcept { return T(); }
        static constexpr T quiet_NaN() noexcept { return T(); }
        static constexpr T signaling_NaN() noexcept { return T(); }
        static constexpr T denorm_min() noexcept { return T(); }
     
        static constexpr bool is_iec559 = false;
        static constexpr bool is_bounded = false;
        static constexpr bool is_modulo = false;
     
        static constexpr bool traps = false;
        static constexpr bool tinyness_before = false;
        static constexpr float_round_style round_style = round_toward_zero;
     
    };
  • template<> class numeric_limits<bool> {
    public:
        static constexpr bool is_specialized = true;
     
        static constexpr bool min() noexcept { return false; }
        static constexpr bool max() noexcept { return true; }
        static constexpr bool lowest() noexcept { return false; }
     
        static constexpr int digits = 1;
        static constexpr int digits10 = 0;
        static constexpr int max_digits10 = 0;
     
        static constexpr bool is_signed = false;
        static constexpr bool is_integer = true;
        static constexpr bool is_exact = true;
        static constexpr int radix = 2;
        static constexpr bool epsilon() noexcept { return 0; }
        static constexpr bool round_error() noexcept { return 0; }
     
        static constexpr int min_exponent = 0;
        static constexpr int min_exponent10 = 0;
        static constexpr int max_exponent = 0;
        static constexpr int max_exponent10 = 0;
     
        static constexpr bool has_infinity = false;
        static constexpr bool has_quiet_NaN = false;
        static constexpr bool has_signaling_NaN = false;
        static constexpr float_denorm_style has_denorm = denorm_absent;
        static constexpr bool has_denorm_loss = false;
        static constexpr bool infinity() noexcept { return 0; }
        static constexpr bool quiet_NaN() noexcept { return 0; }
        static constexpr bool signaling_NaN() noexcept { return 0; }
        static constexpr bool denorm_min() noexcept { return 0; }
     
        static constexpr bool is_iec559 = false;
        static constexpr bool is_bounded = true;
        static constexpr bool is_modulo = false;
     
        static constexpr bool traps = false;
        static constexpr bool tinyness_before = false;
        static constexpr float_round_style round_style = round_toward_zero;
     
    };