首页 > 解决方案 > C++ 标准中是否有关于精度和范围的浮点要求

问题描述

C++ 标准做出以下声明:

[basic.fundamental]共有三种浮点类型:floatdoublelong double。double 类型提供的精度至少与 float 一样,long double 类型提供的精度至少与 double 一样。float 类型的值集是 double 类型的值集的子集;double 类型的值集是 long double 类型的值集的子集。浮点类型的值表示是实现定义的。[注:本文档对浮点运算的准确性没有要求;另见[support.limits]。— 尾注] 整数和浮点类型统称为算术类型。标准库模板的特化std​::​numeric_­limits应为实现指定每种算术类型的最大值和最小值。

[support.limits]标题<limits>( [limits.syn] )、<climits>;( [climits.syn]<cfloat>( [cfloat.syn] ) 提供了依赖于实现的算术类型 ( [basic.fundamental] ) 的特征。

[cfloat.syn]头文件<cfloat>定义了与 C 标准库头文件相同的所有宏<float.h>参见: ISO C 5.2.4.2.2

这一切似乎都指向了这样一个事实,即C++ 标准不想做出任何声明 afloat或应该最低限度是什么。但是,C 标准的最后引用点引用。然而,这定义了对精度和范围浮点数的最低要求。doublelong double<float.h>


问题:[cfloat.syn]中的语句是否暗示定义了相同的宏并且具有相同的含义。或者它是否更进一步,也意味着遵循 C 标准中定义的最低要求?

5.2.4.2.2 浮动类型的特点

365 以下列表中给出的值应替换为常量表达式,其具有在幅度(绝对值)上大于或等于所示值的实现定义值,并带有相同的符号:

...

FLT_DIG                          6
DBL_DIG                         10
LDBL_DIG                        10
...

相关问题:

标签: c++floating-pointlanguage-lawyer

解决方案


推荐阅读