我正在使用gcc编译器(Linux,gcc --version是4.8.2)进行c ++编程。我关注浮点类型std::numeric_limits<T>
T
(float
,double
,long double
)的static constexpr int digits
模板专精。更具体地说,我感兴趣的是std::numeric_limits<T>
的静态成员T
对浮点类型digits
的价值。
据我所知,在当前的C ++标准中,它表示std::numeric_limits<T>::digits
的值是尾数中的基数位数。我为我的机器上的不同浮点类型打印了std::numeric_limits<T>::is_iec559
的值(浮点类型根据字段T=float
实现了IEEE754)并且我对结果感到有些惊讶:I.e。对于24
,它说float
。
据我所知, Single 类型(即digits
) - 根据IEEE754 - 有一个23位的尾数(浮点数的有效位数)(虽然有1个符号位和8位指数,总共32位)。那么为什么24
设置为digits
? double
的{{1}}值为53
而不是52(根据IEEE754, Double 的尾数中的位数)。
可能是一些微妙的(或不那么微妙的?)浮点问题,但我想知道。