当前位置: 首页 > news >正文

C++标准模板(STL)- 类型支持 (数值极限,min_exponent10,max_exponent,max_exponent10)

数值极限

std::numeric_limits

定义于头文件 <limits>

定义于头文件 <limits>

template< class T > class numeric_limits;

numeric_limits 类模板提供查询各种算术类型属性的标准化方式(例如 int 类型的最大可能值是 std::numeric_limits<int>::max() )。
 

10 的该数次幂是合法正规浮点值的最小负数

std::numeric_limits<T>::min_exponent10

static const int min_exponent10;

(C++11 前)

static constexpr int min_exponent10;

(C++11 起)

std::numeric_limits<T>::min_exponent10 的值是满足 10n是浮点类型 T 的合法正规值的最低负数 n

标准特化

Tstd::numeric_limits<T>::min_exponent10 的值
/* non-specialized */​0​
bool​0​
char​0​
signed char​0​
unsigned char​0​
wchar_t​0​
char8_t​0​
char16_t​0​
char32_t​0​
short​0​
unsigned short​0​
int​0​
unsigned int​0​
long​0​
unsigned long​0​
long long​0​
unsigned long long​0​
floatFLT_MIN_10_EXP
doubleDBL_MIN_10_EXP
long doubleLDBL_MIN_10_EXP

调用示例

#include <iostream>
#include <string>
#include <limits>
#include <cstdint>
#include <cfloat>struct SName
{
};//偏特化
struct SPartSpec
{
};namespace std
{
template<>
struct numeric_limits<SPartSpec>
{static _GLIBCXX_USE_CONSTEXPR bool is_specialized   = true;static _GLIBCXX_USE_CONSTEXPR bool is_signed        = true;static _GLIBCXX_USE_CONSTEXPR bool is_integer       = true;static _GLIBCXX_USE_CONSTEXPR bool is_exact         = true;static _GLIBCXX_USE_CONSTEXPR bool has_infinity     = true;static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN    = true;static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = true;static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm     = denorm_present;static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss  = true;static _GLIBCXX_USE_CONSTEXPR float_round_style round_style     = round_toward_neg_infinity;static _GLIBCXX_USE_CONSTEXPR bool is_iec559        = true;static _GLIBCXX_USE_CONSTEXPR bool is_bounded       = true;static _GLIBCXX_USE_CONSTEXPR bool is_modulo        = true;static _GLIBCXX_USE_CONSTEXPR int  digits           = CHAR_BIT;static _GLIBCXX_USE_CONSTEXPR int  digits10         = CHAR_BIT;static _GLIBCXX_USE_CONSTEXPR int  max_digits10     = DECIMAL_DIG;static _GLIBCXX_USE_CONSTEXPR int  radix            = FLT_RADIX;static _GLIBCXX_USE_CONSTEXPR int  min_exponent     = FLT_MIN_EXP;static _GLIBCXX_USE_CONSTEXPR int  min_exponent10   = FLT_MIN_10_EXP;
};
}int main()
{std::cout << std::boolalpha;std::cout << "std::numeric_limits<bool>::min_exponent10:                 "<< std::numeric_limits<bool>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<char>::min_exponent10:                 "<< std::numeric_limits<char>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<signed char>::min_exponent10:          "<< std::numeric_limits<signed char>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned char>::min_exponent10:        "<< std::numeric_limits<unsigned char>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<wchar_t>::min_exponent10:              "<< std::numeric_limits<wchar_t>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<char16_t>::min_exponent10:             "<< std::numeric_limits<char16_t>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<char32_t>::min_exponent10:             "<< std::numeric_limits<char32_t>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<short>::min_exponent10:                "<< std::numeric_limits<short>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned short>::min_exponent10:       "<< std::numeric_limits<unsigned short>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<int>::min_exponent10:                  "<< std::numeric_limits<int>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned int>::min_exponent10:         "<< std::numeric_limits<unsigned int>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<long>::min_exponent10:                 "<< std::numeric_limits<long>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned long>::min_exponent10:        "<< std::numeric_limits<unsigned long>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<long long>::min_exponent10:            "<< std::numeric_limits<long long>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned long long>::min_exponent10:   "<< std::numeric_limits<unsigned long long>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<float>::min_exponent10:                "<< std::numeric_limits<float>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<double>::min_exponent10:               "<< std::numeric_limits<double>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<long double>::min_exponent10:          "<< std::numeric_limits<long double>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<std::string>::min_exponent10:          "<< std::numeric_limits<std::string>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<SName>::min_exponent10:                "<< std::numeric_limits<SName>::min_exponent10 << std::endl;std::cout << "std::numeric_limits<SPartSpec>::min_exponent10:            "<< std::numeric_limits<SPartSpec>::min_exponent10 << std::endl;return 0;
}

输出

底的该数次幂是合法有限浮点值的最大整数加一

std::numeric_limits<T>::max_exponent

static const int max_exponent;

(C++11 前)

static constexpr int max_exponent;

(C++11 起)

std::numeric_limits<T>::max_exponent 的值是满足 rn-1是浮点类型 T 的可表示有限值最大正整数 n ,其中 r 是 std::numeric_limits<T>::radix 。

标准特化

Tstd::numeric_limits<T>::max_exponent 的值
/* non-specialized */​0​
bool​0​
char​0​
signed char​0​
unsigned char​0​
wchar_t​0​
char8_t​0​
char16_t​0​
char32_t​0​
short​0​
unsigned short​0​
int​0​
unsigned int​0​
long​0​
unsigned long​0​
long long​0​
unsigned long long​0​
floatFLT_MAX_EXP
doubleDBL_MAX_EXP
long doubleLDBL_MAX_EXP

调用示例

#include <iostream>
#include <string>
#include <limits>
#include <cstdint>
#include <cfloat>struct SName
{
};//偏特化
struct SPartSpec
{
};namespace std
{
template<>
struct numeric_limits<SPartSpec>
{static _GLIBCXX_USE_CONSTEXPR bool is_specialized   = true;static _GLIBCXX_USE_CONSTEXPR bool is_signed        = true;static _GLIBCXX_USE_CONSTEXPR bool is_integer       = true;static _GLIBCXX_USE_CONSTEXPR bool is_exact         = true;static _GLIBCXX_USE_CONSTEXPR bool has_infinity     = true;static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN    = true;static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = true;static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm     = denorm_present;static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss  = true;static _GLIBCXX_USE_CONSTEXPR float_round_style round_style     = round_toward_neg_infinity;static _GLIBCXX_USE_CONSTEXPR bool is_iec559        = true;static _GLIBCXX_USE_CONSTEXPR bool is_bounded       = true;static _GLIBCXX_USE_CONSTEXPR bool is_modulo        = true;static _GLIBCXX_USE_CONSTEXPR int  digits           = CHAR_BIT;static _GLIBCXX_USE_CONSTEXPR int  digits10         = CHAR_BIT;static _GLIBCXX_USE_CONSTEXPR int  max_digits10     = DECIMAL_DIG;static _GLIBCXX_USE_CONSTEXPR int  radix            = FLT_RADIX;static _GLIBCXX_USE_CONSTEXPR int  min_exponent     = FLT_MIN_EXP;static _GLIBCXX_USE_CONSTEXPR int  min_exponent10   = FLT_MIN_10_EXP;static _GLIBCXX_USE_CONSTEXPR int  max_exponent     = FLT_MAX_EXP;
};
}int main()
{std::cout << std::boolalpha;std::cout << "std::numeric_limits<bool>::max_exponent:                 "<< std::numeric_limits<bool>::max_exponent << std::endl;std::cout << "std::numeric_limits<char>::max_exponent:                 "<< std::numeric_limits<char>::max_exponent << std::endl;std::cout << "std::numeric_limits<signed char>::max_exponent:          "<< std::numeric_limits<signed char>::max_exponent << std::endl;std::cout << "std::numeric_limits<unsigned char>::max_exponent:        "<< std::numeric_limits<unsigned char>::max_exponent << std::endl;std::cout << "std::numeric_limits<wchar_t>::max_exponent:              "<< std::numeric_limits<wchar_t>::max_exponent << std::endl;std::cout << "std::numeric_limits<char16_t>::max_exponent:             "<< std::numeric_limits<char16_t>::max_exponent << std::endl;std::cout << "std::numeric_limits<char32_t>::max_exponent:             "<< std::numeric_limits<char32_t>::max_exponent << std::endl;std::cout << "std::numeric_limits<short>::max_exponent:                "<< std::numeric_limits<short>::max_exponent << std::endl;std::cout << "std::numeric_limits<unsigned short>::max_exponent:       "<< std::numeric_limits<unsigned short>::max_exponent << std::endl;std::cout << "std::numeric_limits<int>::max_exponent:                  "<< std::numeric_limits<int>::max_exponent << std::endl;std::cout << "std::numeric_limits<unsigned int>::max_exponent:         "<< std::numeric_limits<unsigned int>::max_exponent << std::endl;std::cout << "std::numeric_limits<long>::max_exponent:                 "<< std::numeric_limits<long>::max_exponent << std::endl;std::cout << "std::numeric_limits<unsigned long>::max_exponent:        "<< std::numeric_limits<unsigned long>::max_exponent << std::endl;std::cout << "std::numeric_limits<long long>::max_exponent:            "<< std::numeric_limits<long long>::max_exponent << std::endl;std::cout << "std::numeric_limits<unsigned long long>::max_exponent:   "<< std::numeric_limits<unsigned long long>::max_exponent << std::endl;std::cout << "std::numeric_limits<float>::max_exponent:                "<< std::numeric_limits<float>::max_exponent << std::endl;std::cout << "std::numeric_limits<double>::max_exponent:               "<< std::numeric_limits<double>::max_exponent << std::endl;std::cout << "std::numeric_limits<long double>::max_exponent:          "<< std::numeric_limits<long double>::max_exponent << std::endl;std::cout << "std::numeric_limits<std::string>::max_exponent:          "<< std::numeric_limits<std::string>::max_exponent << std::endl;std::cout << "std::numeric_limits<SName>::max_exponent:                "<< std::numeric_limits<SName>::max_exponent << std::endl;std::cout << "std::numeric_limits<SPartSpec>::max_exponent:            "<< std::numeric_limits<SPartSpec>::max_exponent << std::endl;return 0;
}

 输出

10 的该数次幂是合法有限浮点值的最大整数

std::numeric_limits<T>::max_exponent10

std::numeric_limits<T>::max_exponent10 的值是满足 10n是浮点类型 T 的可表示有限值的最大正整数 n

标准特化

Tstd::numeric_limits<T>::max_exponent10 的值
/* non-specialized */​0​
bool​0​
char​0​
signed char​0​
unsigned char​0​
wchar_t​0​
char8_t​0​
char16_t​0​
char32_t​0​
short​0​
unsigned short​0​
int​0​
unsigned int​0​
long​0​
unsigned long​0​
long long​0​
unsigned long long​0​
floatFLT_MAX_10_EXP
doubleDBL_MAX_10_EXP
long doubleLDBL_MAX_10_EXP

调用示例

#include <iostream>
#include <string>
#include <limits>
#include <cstdint>
#include <cfloat>struct SName
{
};//偏特化
struct SPartSpec
{
};namespace std
{
template<>
struct numeric_limits<SPartSpec>
{static _GLIBCXX_USE_CONSTEXPR bool is_specialized   = true;static _GLIBCXX_USE_CONSTEXPR bool is_signed        = true;static _GLIBCXX_USE_CONSTEXPR bool is_integer       = true;static _GLIBCXX_USE_CONSTEXPR bool is_exact         = true;static _GLIBCXX_USE_CONSTEXPR bool has_infinity     = true;static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN    = true;static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = true;static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm     = denorm_present;static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss  = true;static _GLIBCXX_USE_CONSTEXPR float_round_style round_style     = round_toward_neg_infinity;static _GLIBCXX_USE_CONSTEXPR bool is_iec559        = true;static _GLIBCXX_USE_CONSTEXPR bool is_bounded       = true;static _GLIBCXX_USE_CONSTEXPR bool is_modulo        = true;static _GLIBCXX_USE_CONSTEXPR int  digits           = CHAR_BIT;static _GLIBCXX_USE_CONSTEXPR int  digits10         = CHAR_BIT;static _GLIBCXX_USE_CONSTEXPR int  max_digits10     = DECIMAL_DIG;static _GLIBCXX_USE_CONSTEXPR int  radix            = FLT_RADIX;static _GLIBCXX_USE_CONSTEXPR int  min_exponent     = FLT_MIN_EXP;static _GLIBCXX_USE_CONSTEXPR int  min_exponent10   = FLT_MIN_10_EXP;static _GLIBCXX_USE_CONSTEXPR int  max_exponent     = FLT_MAX_EXP;static _GLIBCXX_USE_CONSTEXPR int  max_exponent10   = FLT_MAX_EXP;
};
}int main()
{std::cout << std::boolalpha;std::cout << "std::numeric_limits<bool>::max_exponent10:                 "<< std::numeric_limits<bool>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<char>::max_exponent10:                 "<< std::numeric_limits<char>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<signed char>::max_exponent10:          "<< std::numeric_limits<signed char>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned char>::max_exponent10:        "<< std::numeric_limits<unsigned char>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<wchar_t>::max_exponent10:              "<< std::numeric_limits<wchar_t>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<char16_t>::max_exponent10:             "<< std::numeric_limits<char16_t>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<char32_t>::max_exponent10:             "<< std::numeric_limits<char32_t>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<short>::max_exponent10:                "<< std::numeric_limits<short>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned short>::max_exponent10:       "<< std::numeric_limits<unsigned short>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<int>::max_exponent10:                  "<< std::numeric_limits<int>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned int>::max_exponent10:         "<< std::numeric_limits<unsigned int>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<long>::max_exponent10:                 "<< std::numeric_limits<long>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned long>::max_exponent10:        "<< std::numeric_limits<unsigned long>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<long long>::max_exponent10:            "<< std::numeric_limits<long long>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<unsigned long long>::max_exponent10:   "<< std::numeric_limits<unsigned long long>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<float>::max_exponent10:                "<< std::numeric_limits<float>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<double>::max_exponent10:               "<< std::numeric_limits<double>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<long double>::max_exponent10:          "<< std::numeric_limits<long double>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<std::string>::max_exponent10:          "<< std::numeric_limits<std::string>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<SName>::max_exponent10:                "<< std::numeric_limits<SName>::max_exponent10 << std::endl;std::cout << "std::numeric_limits<SPartSpec>::max_exponent10:            "<< std::numeric_limits<SPartSpec>::max_exponent10 << std::endl;return 0;
}

输出

http://www.lryc.cn/news/193366.html

相关文章:

  • linux 服务器类型Apache配置https访问
  • langchain 加载各种格式文件读取方法
  • 飞花令游戏(Python)
  • 解决“413 Request Entity Too Large”错误 代表请求包太大,服务器拒绝响应
  • MoeCTF2023web
  • C语言编写简易图书管理系统
  • C++入门 第一篇(C++关键字, 命名空间,C++输入输出)
  • python股票波动性分析
  • 53 打家劫舍
  • CentOS 7 基于C 连接ZooKeeper 客户端
  • 2023-2024-1 for循环-1(15-38)
  • 初级问题 程序中的变量是指什么?中级问题 把若干个数据沿直线排列起来的数据结构叫作什么?高级问题 栈和队列的区别是什么?
  • clickhouse数据库简介,列式存储
  • flask 发送ajax
  • Android Gradle 命令打包AAR
  • 如何导出带有材质的GLB模型?
  • C/C++面试常见知识点
  • 详细介绍数据结构-堆
  • 001flutter基础学习
  • leetCode 1143.最长公共子序列 动态规划 + 图解
  • 解密人工智能:KNN | K-均值 | 降维算法 | 梯度Boosting算法 | AdaBoosting算法
  • Python深度学习实践
  • VS2017+QT+PCL环境配置
  • 207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)
  • 想要精通算法和SQL的成长之路 - 滑动窗口和大小根堆
  • Python算法练习 10.15
  • 智能防眩目前照灯系统控制器ADB
  • 若依 ruoyi 路径 地址 # 井号去除
  • Elasticsearch 和 Arduino:一起变得更好!
  • 基于Ubuntu环境Git 服务器搭建及使用