C++标准模板(STL)- 类型支持 (数值极限,round_style,is_iec559,is_bounded)

数值极限


定义于头文件 <limits>

定义于头文件 <limits>

template< class T > class numeric_limits;

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

鉴别类型所用的舍入模式

std::numeric_limits<T>::round_style

static const std::float_round_style round_style;

(C++11 前)

static constexpr std::float_round_style round_style;

(C++11 起)

标准特化

Tstd::numeric_limits<T>::round_style 的值
/* non-specialized */std::round_toward_zero
boolstd::round_toward_zero
charstd::round_toward_zero
signed charstd::round_toward_zero
unsigned charstd::round_toward_zero
wchar_tstd::round_toward_zero
char8_tstd::round_toward_zero
char16_tstd::round_toward_zero
char32_tstd::round_toward_zero
shortstd::round_toward_zero
unsigned shortstd::round_toward_zero
intstd::round_toward_zero
unsigned intstd::round_toward_zero
longstd::round_toward_zero
unsigned longstd::round_toward_zero
long longstd::round_toward_zero
unsigned long longstd::round_toward_zero
float通常为 std::round_to_nearest
double通常为 std::round_to_nearest
long double通常为 std::round_to_nearest

注意

这些值是常量,且不反映 std::fesetround 所做的舍入模式更改。被更改的值可从 FLT_ROUNDS 或 std::fegetround 获得。

示例

十进制值 0.1 不能表示成二进制浮点类型。在存储于 IEEE-745 double 时,它落入 0x1.9999999999999*2-4与 0x1.999999999999a*2-4之间。舍入到最近可表示结果导致 0x1.999999999999a*2-4。同样地,十进制值 0.3 在 0x1.3333333333333*2-2与 0x1.3333333333334*2-2
之间,舍入到最近值后存储为 0x1.3333333333333*2-2。

 调用示例

#include <iostream>
#include <string>
#include <limits>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;
};
}int main()
{std::cout << std::boolalpha;std::cout << "std::numeric_limits<bool>::round_style:                 "<< std::numeric_limits<bool>::round_style << std::endl;std::cout << "std::numeric_limits<char>::round_style:                 "<< std::numeric_limits<char>::round_style << std::endl;std::cout << "std::numeric_limits<signed char>::round_style:          "<< std::numeric_limits<signed char>::round_style << std::endl;std::cout << "std::numeric_limits<unsigned char>::round_style:        "<< std::numeric_limits<unsigned char>::round_style << std::endl;std::cout << "std::numeric_limits<wchar_t>::round_style:              "<< std::numeric_limits<wchar_t>::round_style << std::endl;std::cout << "std::numeric_limits<char16_t>::round_style:             "<< std::numeric_limits<char16_t>::round_style << std::endl;std::cout << "std::numeric_limits<char32_t>::round_style:             "<< std::numeric_limits<char32_t>::round_style << std::endl;std::cout << "std::numeric_limits<short>::round_style:                "<< std::numeric_limits<short>::round_style << std::endl;std::cout << "std::numeric_limits<unsigned short>::round_style:       "<< std::numeric_limits<unsigned short>::round_style << std::endl;std::cout << "std::numeric_limits<int>::round_style:                  "<< std::numeric_limits<int>::round_style << std::endl;std::cout << "std::numeric_limits<unsigned int>::round_style:         "<< std::numeric_limits<unsigned int>::round_style << std::endl;std::cout << "std::numeric_limits<long>::round_style:                 "<< std::numeric_limits<long>::round_style << std::endl;std::cout << "std::numeric_limits<unsigned long>::round_style:        "<< std::numeric_limits<unsigned long>::round_style << std::endl;std::cout << "std::numeric_limits<long long>::round_style:            "<< std::numeric_limits<long long>::round_style << std::endl;std::cout << "std::numeric_limits<unsigned long long>::round_style:   "<< std::numeric_limits<unsigned long long>::round_style << std::endl;std::cout << "std::numeric_limits<float>::round_style:                "<< std::numeric_limits<float>::round_style << std::endl;std::cout << "std::numeric_limits<double>::round_style:               "<< std::numeric_limits<double>::round_style << std::endl;std::cout << "std::numeric_limits<long double>::round_style:          "<< std::numeric_limits<long double>::round_style << std::endl;std::cout << "std::numeric_limits<std::string>::round_style:          "<< std::numeric_limits<std::string>::round_style << std::endl;std::cout << "std::numeric_limits<SName>::round_style:                "<< std::numeric_limits<SName>::round_style << std::endl;std::cout << "std::numeric_limits<SPartSpec>::round_style:            "<< std::numeric_limits<SPartSpec>::round_style << std::endl;return 0;
}

输出

鉴别 IEC 559/IEEE 754 浮点类型

std::numeric_limits<T>::is_iec559

static const bool is_iec559;

(C++11 前)

static constexpr bool is_iec559;

(C++11 起)

 std::numeric_limits<T>::is_iec559 的值对于所有符合 IEC 559 ( IEEE 754 )标准要求的浮点类型 T 为 true 。若 std::numeric_limits<T>::is_iec559 为 true ,则 std::numeric_limits<T>::has_infinity 、 std::numeric_limits<T>::has_quiet_NaN 与 std::numeric_limits<T>::has_signaling_NaN 亦为 true 。

标准特化

Tstd::numeric_limits<T>::is_iec559 的值
/* non-specialized */false
boolfalse
charfalse
signed charfalse
unsigned charfalse
wchar_tfalse
char8_tfalse
char16_tfalse
char32_tfalse
shortfalse
unsigned shortfalse
intfalse
unsigned intfalse
longfalse
unsigned longfalse
long longfalse
unsigned long longfalse
float通常为 true
double通常为 true
long double通常为 true

调用示例

#include <iostream>
#include <string>
#include <limits>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;
};
}int main()
{std::cout << std::boolalpha;std::cout << "std::numeric_limits<bool>::is_iec559:                 "<< std::numeric_limits<bool>::is_iec559 << std::endl;std::cout << "std::numeric_limits<char>::is_iec559:                 "<< std::numeric_limits<char>::is_iec559 << std::endl;std::cout << "std::numeric_limits<signed char>::is_iec559:          "<< std::numeric_limits<signed char>::is_iec559 << std::endl;std::cout << "std::numeric_limits<unsigned char>::is_iec559:        "<< std::numeric_limits<unsigned char>::is_iec559 << std::endl;std::cout << "std::numeric_limits<wchar_t>::is_iec559:              "<< std::numeric_limits<wchar_t>::is_iec559 << std::endl;std::cout << "std::numeric_limits<char16_t>::is_iec559:             "<< std::numeric_limits<char16_t>::is_iec559 << std::endl;std::cout << "std::numeric_limits<char32_t>::is_iec559:             "<< std::numeric_limits<char32_t>::is_iec559 << std::endl;std::cout << "std::numeric_limits<short>::is_iec559:                "<< std::numeric_limits<short>::is_iec559 << std::endl;std::cout << "std::numeric_limits<unsigned short>::is_iec559:       "<< std::numeric_limits<unsigned short>::is_iec559 << std::endl;std::cout << "std::numeric_limits<int>::is_iec559:                  "<< std::numeric_limits<int>::is_iec559 << std::endl;std::cout << "std::numeric_limits<unsigned int>::is_iec559:         "<< std::numeric_limits<unsigned int>::is_iec559 << std::endl;std::cout << "std::numeric_limits<long>::is_iec559:                 "<< std::numeric_limits<long>::is_iec559 << std::endl;std::cout << "std::numeric_limits<unsigned long>::is_iec559:        "<< std::numeric_limits<unsigned long>::is_iec559 << std::endl;std::cout << "std::numeric_limits<long long>::is_iec559:            "<< std::numeric_limits<long long>::is_iec559 << std::endl;std::cout << "std::numeric_limits<unsigned long long>::is_iec559:   "<< std::numeric_limits<unsigned long long>::is_iec559 << std::endl;std::cout << "std::numeric_limits<float>::is_iec559:                "<< std::numeric_limits<float>::is_iec559 << std::endl;std::cout << "std::numeric_limits<double>::is_iec559:               "<< std::numeric_limits<double>::is_iec559 << std::endl;std::cout << "std::numeric_limits<long double>::is_iec559:          "<< std::numeric_limits<long double>::is_iec559 << std::endl;std::cout << "std::numeric_limits<std::string>::is_iec559:          "<< std::numeric_limits<std::string>::is_iec559 << std::endl;std::cout << "std::numeric_limits<SName>::is_iec559:                "<< std::numeric_limits<SName>::is_iec559 << std::endl;std::cout << "std::numeric_limits<SPartSpec>::is_iec559:            "<< std::numeric_limits<SPartSpec>::is_iec559 << std::endl;return 0;
}

 输出

鉴别表示有限值集合的类型

std::numeric_limits<T>::is_bounded

static const bool is_bounded;

(C++11 前)

static constexpr bool is_bounded;

(C++11 起)

 std::numeric_limits<T>::is_bounded 对所有表示有限的值集合的算术类型 T 为 true 。所有基础类型均有界,不过此常量会在 std::numeric_limits 对库提供的任意精度算术类型的特化中为 false 。

标准特化

Tstd::numeric_limits<T>::is_bounded 的值
/* non-specialized */false
booltrue
chartrue
signed chartrue
unsigned chartrue
wchar_ttrue
char8_ttrue
char16_ttrue
char32_ttrue
shorttrue
unsigned shorttrue
inttrue
unsigned inttrue
longtrue
unsigned longtrue
long longtrue
unsigned long longtrue
floattrue
doubletrue
long doubletrue

调用示例

#include <iostream>
#include <string>
#include <limits>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;
};
}int main()
{std::cout << std::boolalpha;std::cout << "std::numeric_limits<bool>::is_bounded:                 "<< std::numeric_limits<bool>::is_bounded << std::endl;std::cout << "std::numeric_limits<char>::is_bounded:                 "<< std::numeric_limits<char>::is_bounded << std::endl;std::cout << "std::numeric_limits<signed char>::is_bounded:          "<< std::numeric_limits<signed char>::is_bounded << std::endl;std::cout << "std::numeric_limits<unsigned char>::is_bounded:        "<< std::numeric_limits<unsigned char>::is_bounded << std::endl;std::cout << "std::numeric_limits<wchar_t>::is_bounded:              "<< std::numeric_limits<wchar_t>::is_bounded << std::endl;std::cout << "std::numeric_limits<char16_t>::is_bounded:             "<< std::numeric_limits<char16_t>::is_bounded << std::endl;std::cout << "std::numeric_limits<char32_t>::is_bounded:             "<< std::numeric_limits<char32_t>::is_bounded << std::endl;std::cout << "std::numeric_limits<short>::is_bounded:                "<< std::numeric_limits<short>::is_bounded << std::endl;std::cout << "std::numeric_limits<unsigned short>::is_bounded:       "<< std::numeric_limits<unsigned short>::is_bounded << std::endl;std::cout << "std::numeric_limits<int>::is_bounded:                  "<< std::numeric_limits<int>::is_bounded << std::endl;std::cout << "std::numeric_limits<unsigned int>::is_bounded:         "<< std::numeric_limits<unsigned int>::is_bounded << std::endl;std::cout << "std::numeric_limits<long>::is_bounded:                 "<< std::numeric_limits<long>::is_bounded << std::endl;std::cout << "std::numeric_limits<unsigned long>::is_bounded:        "<< std::numeric_limits<unsigned long>::is_bounded << std::endl;std::cout << "std::numeric_limits<long long>::is_bounded:            "<< std::numeric_limits<long long>::is_bounded << std::endl;std::cout << "std::numeric_limits<unsigned long long>::is_bounded:   "<< std::numeric_limits<unsigned long long>::is_bounded << std::endl;std::cout << "std::numeric_limits<float>::is_bounded:                "<< std::numeric_limits<float>::is_bounded << std::endl;std::cout << "std::numeric_limits<double>::is_bounded:               "<< std::numeric_limits<double>::is_bounded << std::endl;std::cout << "std::numeric_limits<long double>::is_bounded:          "<< std::numeric_limits<long double>::is_bounded << std::endl;std::cout << "std::numeric_limits<std::string>::is_bounded:          "<< std::numeric_limits<std::string>::is_bounded << std::endl;std::cout << "std::numeric_limits<SName>::is_bounded:                "<< std::numeric_limits<SName>::is_bounded << std::endl;std::cout << "std::numeric_limits<SPartSpec>::is_bounded:            "<< std::numeric_limits<SPartSpec>::is_bounded << std::endl;return 0;
}

 输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/131980.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器上部署python脚本

1.查看服务器上的python是否自带&#xff0c;一般都自带 2.将本地脚本上传到服务器 3.直接运行一下脚本看报什么错误 代码错误&#xff0c; 将f删除后报别的错误 上面是未安装依赖的错误。我们安装一下依赖 下面是编码的解决 #!/usr/bin/python # -*- coding: utf-8 -*- 先把…

Java项目调用Python脚本(基于idea)

前期准备 1.首先需要在本地环境中安装配置python环境 Python(含PyCharm及配置)下载安装以及简单使用(Idea) 博主本次使用python版本为py3.7.3 2.idea安装python插件 位置&#xff1a;File->Settings->Plugins->python->安装后重启即可 3.引入jython依赖 &l…

mac 版hadoop3.2.4 解决 Unable to load native-hadoop library 缺失文件

mac 版hadoop3.2.4或其他版本 Unable to load native-hadoop library 缺失文件 Native 包报错缺失&#xff1a; 1. hadoop-3.2.4/lib/native里加*.dylib 2. hadoop-3.2.4/etc/hadoop/hadoop-env.sh 加或修改 export HADOOP_OPTS"-Djava.library.path/Users/lvan/Documen…

虚拟机软件Parallels Desktop 19 mac功能介绍

Parallels Desktop 19 mac是一款虚拟机软件&#xff0c;它允许用户在Mac电脑上同时运行Windows、Linux和其他操作系统。Parallels Desktop提供了直观易用的界面&#xff0c;使用户可以轻松创建、配置和管理虚拟机。 PD19虚拟机软件具有快速启动和关闭虚拟机的能力&#xff0c;让…

【Unity ShaderGraph】| 给模型添加一个 边缘光效果 实战

前言 【Unity ShaderGraph】| 边缘光效果实战一、效果展示二、简易边缘光效果三、进阶边缘光效果四、应用实例 前言 本文将使用Unity ShaderGraph制作一个模型边缘光的效果&#xff0c;可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章&#xff1a;【U…

iPhone手机记笔记工具选择用哪个

iPhone手机大家应该都比较熟悉&#xff0c;其使用性能是比较流畅的&#xff0c;在iPhone手机上记录笔记可以帮助大家快速地进行总结工作、记录工作内容等&#xff0c;在iPhone手机上记笔记工具选择用哪个呢&#xff1f; 可以在iPhone手机上使用的笔记工具是比较多的&#xff0…

Android绑定式服务

Github:https://github.com/MADMAX110/Odometer 启动式服务对于后台操作很合适&#xff0c;不过需要一个更有交互性的服务。 接下来构建这样一个应用&#xff1a; 1、创建一个绑定式服务的基本版本&#xff0c;名为OdometerService 我们要为它增加一个方法getDistance()&#x…

基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持本地图片上传与回显的功能实现(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 排除路径&#xff0c;增加avatar图片 # security配置 security:# 排除路径excludes:# 静态资源- /*.html…

上海亚商投顾:沪指冲高回落 医药、芯片股全天领涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日小幅反弹&#xff0c;创业板指盘中涨超1.6%&#xff0c;午后涨幅有所收窄。医药医疗股全线走强&#…

养老院一键报警的重要性和应用

盾王养老院一键报警的重要性和应用 首先&#xff0c;一键报警装置能够极大地提高养老院的安全性。老年人由于身体机能下降&#xff0c;往往容易成为犯罪分子的目标。而一键报警装置能够在遇到危险情况时&#xff0c;立即向养老院管理人员发送警报&#xff0c;从而及时采取措施…

学信息系统项目管理师第4版系列24_整合管理

1. PMBOK 1.1. 自1987年以来&#xff0c;PMBOK-直是基于过程的项目管理标准的重要代表 1.1.1. 基于过程的方法是项目管理的基石 1.2. 从2021年开始&#xff0c;第7版PMBOK采用了基于原则的标准&#xff0c;其中包含了 12个项目管理基本原则&#xff0c;这些基本原则为有效的…

Linux中Locate命令查找不全

Locate locate(locate) 命令用来查找文件或目录。 locate命令要比find -name快得多&#xff0c;原因在于它不搜索具体目录&#xff0c;而是搜索一个数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地所有文件信息。Linux系统会自动创建这个数据库&#xff0c;并且每天…