C++ 参考手册

static const bool has_denorm_loss;
(C++11 前)
static constexpr bool has_denorm_loss;
(C++11 起)

std::numeric_limits<T>::has_denorm_loss 的值对于所有检测在创建非正规数时的精度损失为非正规化损失,而非不准确结果(见后述)的浮点类型 Ttrue

标准特化

 
T std::numeric_limits<T>::has_denorm_loss 的值
/* non-specialized */ false
bool false
char false
signed char false
unsigned char false
wchar_t false
char8_t false
char16_t false
char32_t false
short false
unsigned short false
int false
unsigned int false
long false
unsigned long false
long long false
unsigned long long false
float 实现定义
double 实现定义
long double 实现定义

注意

与标准一致的非正规数的 IEEE 754 浮点实现要求检测关联到创建这种数的精度损失,若它出现,而且可以以二种迥异的方式进行:

1) 非正规化损失:产生的结果异于假如指数范围无界的情况下计算出的结果。
2) 不准确结果:产生的结果异于假如指数范围和精度均无界的情况下计算出的结果。

不存在非正规化损失机制的实现(精度损失在舍入后检测为不准确结果),而此选项在 IEEE 标准 754 的 2008 修订版被移除。

libstdc++ 、 libc++ 、 libCstd 及 stlport4 为所有浮点类型定义此常量为 false 。 Microsoft Visual Studio 为所有浮点类型定义它为 true

同任何浮点计算,精度损失可能引发 FE_INEXACT

示例

本节未完成
原因:暂无示例

参阅

鉴别检测舍入前是否非正规的浮点类型
(公开静态成员常量)
[静态]
鉴别浮点类型所用的非正规风格
(公开静态成员常量)