numeric_limits <int>

我们常讲,int:是有符号整型,而 unsigned int:是无符号整型,可此话怎讲呢,自然是值域(range),也即数值范围不同。

std::cout << std::numeric_limits <unsigned int>::min() << std::endl;// 0
std::cout << std::numeric_limits<unsigned int>::max() << std::endl;// 4294967295// 4294967295的二进制恰为:// 1111 1111 1111 1111 1111 1111 1111 1111 == 2^32-1                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

也即 unsigned int 的取值范围为:[0,232−1][0,232−1]

我们再来看 int的取值范围(最高位,也即第32位为符号位):

std::cout << std::numeric_limits<int>::min() << std::endl;// -2147483648// 也即2^31,第32位为1,其余各位均为0
std::cout << std::numeric_limits<int>::max() << std::endl;// 22147483647// 2^31-1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

故 int 的取值范围为:[−2047483648,2047483647][−2047483648,2047483647]

numeric_limits <double>

std::cout << std::numeric_limits<double>::min() << std::endl;// 2.22507e-308
std::cout << std::numeric_limits<double>::max() << std::endl;// 1.79769e+308
  • 1
  • 2
  • 3
  • 4

注意这里的 std::numeric_limits<double>::min() 表达不是 −∞−∞,而是(正)无穷小量 ϵϵ

如果我们想要表达负无穷(−∞−∞),我们自然可以使用:

std::cout << -std::numeric_limits<double>::max() << std::endl;// -1.79769e+308
  • 1
  • 2
  • 3

std::numeric_limits<T>::epsilon()

注意这里:

std::cout << std::numeric_limits<double>::min() << std::endl;// 2.22507e-308
std::cout << std::numeric_limits<double>::epsilon() << std::endl;// 2.22045e-016
  • 1
  • 2
  • 3
  • 4

两者显然不在一个数量级上。 
我们来看 msdn 对epsilon的说明:

The function returns the difference between 1 and the smallest value greater than 1 that is representable for the data type.

也即 std::numeric_limits<T>::epsilon() 返回的是计算机体系结构所能判断的两个同类型的数据是否相等的极限,也即如果两个数的差值小于std::numeric_limits<T>::epsilon() ,在计算机看来两者没差。

std::cout << std::boolalpha;
std::cout << (1. == 1.+std::numeric_limits<double>::epsilon()) << std::endl;// false
std::cout << (1. == 1.+std::numeric_limits<double>::epsilon()/2) << std::endl;// true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

应用

用最大值(max,取值范围的极限)表示该值未取值

#define NULL_INT std::numeric_limits<int>::max()
#define NULL_SIZE std::numeric_limits<unsigned int>::max()
#define NULL_REAL std::numeric_limits<double>::max()

numeric_limits相关推荐

  1. C++数值极限numeric_limits

    一般来说,数值类型的极值是一个与平台相关的特性.C++标准程序库通过template numeric_limits提供这些极值,取代传统C语言所采用的预处理常数.你仍然可以使用后者,其中整数常数定义于 ...

  2. boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例

    boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例 实现功能 C++实现代码 实现功能 bo ...

  3. C++ limits头文件的用法numeric_limits

    参考链接 Cplus plus 参考链接 numeric_limits<double>::max ()是函数,返回编译器允许的 double 型数 最大值. 类似的 numeric_lim ...

  4. max std value 宏_【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题...

    多年以前,Microsoft 幹了一件比 #define N 3 還要蠢的蠢事,那就是在 放入了 min/max 這兩個宏命令(macros). #define max(a,b)            ...

  5. C++ std::numeric_limits

    一 简介 头文件<limits> template <class T> numeric_limits; Provides information about the prope ...

  6. 关于numeric_limits

    今天做BS的TC++PL第四章的习题,有一个求各种类型的最大最小值的题,要用到 numeric_limits<class   T>模版类,做完题以后,查了一下该模版类的用法,在本文做个总结 ...

  7. numeric_limits用法

    numeric_limits Class 模板类描述算术类型的属性的内置数字. template<classType> classnumeric_limits 参数 Type 基本元素数据 ...

  8. 【C++】limits头文件 numeric_limits

    http://blog.csdn.net/netrookie/article/details/5530578 初学C++的时候,对这个模板很陌生,不知道它到底是做什么用的,今天拿起<C++标准程 ...

  9. numeric_limits的运用

    numeric_limits属于C++标准库,用以查询内置算术类型的属性.你可以确定一个类型需要多少位,十进制数字,它有最大值,最小值等. Example // numeric_limits exam ...

最新文章

  1. quartz表达式在线生成器
  2. ML:MLOps系列讲解之《MLOps的定义与发展—你为什么可能想使用机器学习》解读
  3. VTK:图片之ImageThreshold
  4. Fiddler之解决https链接返回数据显示乱码问题
  5. python练习题:列表排序
  6. java串口发送16进制数据_MFC串口通信发送16进制数据的方法
  7. 产品经理思维模型:从品牌营销的角度看用户
  8. python select
  9. django视图(views)
  10. 计算机CAD作文,CAD:电脑系统字体和CAD字体的区别
  11. Android选项卡TabHost功能和用法
  12. 电脑计算机推荐笔记本电脑,十佳办公笔记本电脑排名,性价比高的笔记本电脑推荐...
  13. 超市管理系统的常用软件
  14. 在div的左上角添加三角形,文字45度倾斜显示
  15. 制作AppStore预览:在 iPhone 上截屏或录制屏幕15秒以上的视频;iPhone日常使用技巧(一直弹出登录iCloud的解决方法、不自动弹出询问是否允许使用蜂窝数据的解决方法)
  16. 关于执行gulp命令报这样的错误:gulp : 无法加载文件 C:\Users\dalv\AppData\Roaming\npm\gulp.ps1
  17. 开源B2B2C WSTMart商城系统开发框架及插件介绍
  18. 泰山OFFICE技术讲座:宋体和Times New Roman字体的Tag表有哪些
  19. 高速串行通信常用的编码方式-8b/10b编码/解码
  20. 大学毕业学技术学什么好

热门文章

  1. 如何使用BeaconEye监控CobaltStrike的Beacon
  2. 一个冷门json类JacksonJsonParser中的坑
  3. 【HDU4416】Good Article Good sentence【后缀数组】
  4. 信号强度诊断(系统架构)
  5. 信号与系统—让我们来了解信号
  6. 最简单的dubbo教程-快速入门《一》
  7. AIDL使用以及原理分析
  8. Bat脚本编写以及cmd命令
  9. 利用Python将选择题、多选题导入Anki
  10. 微信小程序应用生命周期