C++标准库的数值极限numeric_limits

包含头文件:#include<limits>

它是一个模板类,它主要是把C++当中的一些内建型别进行了封装,比如说numeric_limits<int>是一个特化后的类,从这个类的成员变量与成员函数中,我们可以了解到int的很多特性:可以表示的最大值,最小值,是否是精确的,是否是有符号等等。如果用其他任意(非内建类型)来特化这个模板类,比如string,string怎么可能有最大值?我们从MSDN上可以了解到,这对string,成员变量与成员函数是没有意义的,要么返回0要么为false。

一般来说,数值类型的极值是一个与平台相关的特性。c++标准程序库通过template numeric_limits提供这些极值,取代传统C语言所采用的预处理常数。你仍然可以使用后者,其中整数常数定义于<climits>和<limits.h>,浮点常数定义于<cfloat>和<float.h>,新的极值概念有两个优点,一是提供了更好的类型安全性,二是程序员可借此写出一些template以核定这些极值。

下面是numeric_limits定义

下面是参数的解释


digits10


返回目标类型在十进制下可以表示的最大位数


epsilon


返回目标数据类型能表示的最逼近1的正数和1的差的绝对值


has_denorm


测试目标类型是不是可以非规范化表示示


has_denorm_loss


测试所有类型是不是能测出因为非规范化而造成的精度损失(不是因为结果本身的不精确)


has_infinity


测试目标类型是不是能表示无限(比如被0除,或者其他一些情况)


has_quiet_NaN


检查目标类型是不是支持安静类型的NaN


has_signaling_NaN


检查目标类型是不是支持信号类型的NaN


infinity


检查目标类型的无限类型(如果支持无限表示)


is_bounded


检查目标类型的取值是否有限


is_exact


测试目标类型的计算结果是不是不会造成舍入误差(比如float是0)


is_iec559


测试目标类型是不是符合IEC559标准


is_integer


测试目标类型是不是可以用整型来表示(比如char是1,float是0)


is_modulo


Tests if a type has a modulo representation.


is_signed


测试目标类型是否是带符号的


is_specialized


测试目标类型是不是在numeric_limits .模板类中有特殊定义


max


返回可取的有限最大值


max_exponent


Returns the maximum positive integral exponent that the floating-point type can represent as a finite value when a base of radix is raised to that power.


max_exponent10


Returns the maximum positive integral exponent that the floating-point type can represent as a finite value when a base of ten is raised to that power.


min


返回可取的最小值(规范化)


min_exponent


Returns the maximum negative integral exponent that the floating-point type can represent as a finite value when a base of radix is raised to that power.


min_exponent10


Returns the maximum negative integral exponent that the floating-point type can represent as a finite value when a base of ten is raised to that power.


quiet_NaN


返回目标类型的安静NAN的表示


radix


Returns the integral base, referred to as radix, used for the representation of a type.


round_error


返回目标类型的最大可能的舍入误差


round_style


Returns a value that describes the various methods that an implementation can choose for rounding a floating-point value to an integer value.


signaling_NaN


返回目标类型关于信号NAN的表示


tinyness_before


测试目标类型是不是能测定出微小的舍入误差


traps


Tests whether trapping that reports on arithmetic exceptions is implemented for a type.



例:输出int、float、char、long、double、signed、unsigned、long long 的最大最小值(float中表示的是所能表示的最小值)

代码:

#include<iostream>
#include <limits>
using namespace std;
int main()
{
cout <<"TYPENAME min max"<<endl;
cout <<"==========================================================================="<<endl;
cout <<"char"<<" ";
cout << (int)numeric_limits<char>::min() <<" ";
cout << (int)numeric_limits<char>::max() <<endl;
cout <<"short"<<" ";
cout << numeric_limits<short>::min() <<" ";
cout << numeric_limits<short>::max() <<endl;
cout <<"int"<<" ";
cout << numeric_limits<int>::min() <<" ";
cout << numeric_limits<int>::max() <<endl;
cout <<"long"<<" ";
cout << numeric_limits<long>::min() <<" ";
cout << numeric_limits<long>::max() <<endl;
cout <<"float"<<" ";
cout << numeric_limits<float>::min() <<" ";
cout << numeric_limits<float>::max() <<endl;
cout <<"double"<<" ";
cout << numeric_limits<double>::min() <<" ";
cout << numeric_limits<double>::max() <<endl;
cout <<"unsigned"<<" ";
cout << numeric_limits<unsigned>::min() <<" ";
cout << numeric_limits<unsigned>::max() <<endl;
cout <<"long long"<<" ";
cout << numeric_limits<long long>::min() <<" ";
cout << numeric_limits<long long>::max() <<endl;
system("pause");
return 0;
}

C++标准库的数值极限numeric_limits

时间: 2024-10-12 15:08:52

C++标准库的数值极限numeric_limits的相关文章

C标准库-数值字符串转换与内存分配函数

原文链接:http://www.orlion.ga/977/ 一.数值字符串转换函数 #include <stdlib.h> int atoi(const char *nptr); double atof(const char *nptr); 返回值:转换结果 atoi把一个字符串开头可以识别成十进制整数的部分转换成int型,例如atoi("   -123abc")返回-123(字符串开头可以有空格).如果字符串开头没有可识别的整数返回0,而atoi("0abc&

用robotframework 标准库String解决由于存在千分位分隔符导致两个数值不相等的问题。

在编写robotframework自动化断言的过程中,我遇到了如下问题: 我想写一个两个金额判断是否相等的断言,其中一个金额是展示字段存在千分位分隔符,另一个金额是input带入字段,没有千分位分隔符,我期望得到相等的结果,但是报错了!!!!作为小白的我完全无从下手,今天终于找到了解决办法----------String标准库. 话不多说,放上标准库的官方文档http://robotframework.org/robotframework/latest/libraries/String.html

标准库》第三章 包装对象和Boolean对象

第三部分  标准库 ***************第三章   包装对象和Boolean对象******************* 一.包装对象的定义[1]有人说,JavaScript语言"一切皆对象",数组和函数本质上都是对象,就连三种原始类型的值--数值.字符串.布尔值--在一定条件下,也会自动转为对象,也就是原始类型的"包装对象". 所谓"包装对象",就是分别与数值.字符串.布尔值相对应的Number.String.Boolean三个原生对象

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义. 在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括: (1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢: (2)质量:标准库的都是经过严格测试的,正确性有保证: (3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平: (4)良好的编程风格:采用行业中普遍的做法进行开发. 一.C++标准库 C++标准库的内容分为10类, 分别是:C1.语

程序设计语言-标准库概述

1 认识标准库 没有任何一个重要程序只用某种赤裸裸的程序设计语言写出的:首先总要开发出一组支持库,这也形成了进一步工作的基础. 2 第一个程序 #include<iostream>  //指编译器包含位于iostream里的标准流I/O功能的声明 int main() //定义一个main()函数,该函数没有参数,也不做任何事情 { std::cout<<"hello,world!\n"; //字符串文字量"hello,world!\n"将被

四轴飞行器1.2.3 STM32F407时钟配置和升级标准库文件

原创文章,欢迎转载,转载请注明出处 这个星期进度比较慢哈,只有周末和晚上下班回来才能做,事件不连续,琐碎的事情又比较多,挺烦的,有多琐碎呢?           1.本人有点小强迫症哈,虽然RTT将文件夹已经分类的很好了,但是在一个项目跟目录下这样放着看起来还是很不舒服的哈,于是强迫症范了,要整理下它.按照以前做项目的习惯,将程序分为四个层次,硬件层,驱动层,系统层和应用层,我们就整理下,对三个文件夹,其中硬件层和驱动层放在BSP文件夹里面,BSP文件里面再分硬件和驱动的文件夹,同时添加一个库文

第17章 标准库特殊设施

17.1类型tuple tuple是类是pair的模板.每个pair都不相同,但是都有两个成员.而一个tuple类型会有任意数量的成员.(定义在tuple头文件中) tuple<T1,T2,...,Tn> t; t是一个tuple,成员数位n,第i个成员的类型为Ti.所有成员都进行值初始化 tuple<T1,T2,...,Tn> t(v1,v2,...,vn); t是一个tuple,成员类型为T1,T2,...,Tn,每个成员用对应的初始值vi进行初始化.此构造函数是explici

python标准库_csv

python标准库_csv 简介 所谓的csv(逗号分隔值Comma Separated Values)格式是最通用的用于电子表格和数据库的导入和导出格式.因为没有"csv标准",所以格式被读写它的许多应用程序自由定义.缺乏标准也意味着不同应用程序在产生和使用数据时总是存在一些微小的差异.这些差异使得处理来自多种源的CSV文件时令人头疼.同时,分隔符和引用符的多样性,使得所有格式足够相近以至于编写一个能够有效操作这种数据,对程序员隐藏读写数据细节的独立模块成为可能. 函数 读文件 可以

C++ 标准库概览(一分钟就看完了)

C++ 标准库以若干头文件的方式提供. 下面简单介绍一个各头文件的内容. 第一部分 容器 Containers <array> C++11 新增.提供了容器类模板 std::array,固定大小数组的容器. <bitset> 提供了专门用来存放位组(一系列 bit)的容器类 std::bitset. <deque> 提供了双向队列容器类模板 std::deque. <forward_list> C++11 新增.提供了单向链表容器类模板 std::forwa