c++ - max_digits10 在引用浮点类型时为 0 有什么好处?

标签 c++ c++11 floating-point precision numeric-limits

在C++11中,std::numeric_limits<Type>::max_digits10的优势是什么?为 Type 返回 0那是对 float 的引用?

例如:

constexpr int precisionPositive(const float &floatVal)
{
  using numericType    = std::remove_reference<decltype(floatVal)>::type;
  constexpr int digits = std::numeric_limits<numericType>::max_digits10;

  return digits;
}

constexpr int precisionZero(const float &floatVal)
{
  using numericType    = decltype(floatVal);
  constexpr int digits = std::numeric_limits<numericType>::max_digits10;

  return digits;
}

precisionPositive返回 9 和 precisionZero返回 0。

在什么情况下零值会有帮助,而不是给出编译时错误?

最佳答案

根据 C++ 标准 (n4659),在 numeric_limits 类模板中,max_digits10 的默认值为 0

21.3.4 Class template numeric_limits [numeric.limits]

namespace std {
template<class T> class numeric_limits {
public:
...  
static constexpr int max_digits10 = 0;

只有当模板专门用于floatdouble等时,max_digits10才会被赋予一个特定的值。

考虑float 的特化。

21.3.4.2 numeric_limits specializations [numeric.special]

namespace std {
template<> class numeric_limits<float> {
public:
...
static constexpr int max_digits10 = 9;

实现也遵循这一点。请参阅 GCC 的标准 C++ 库 header limits例如。

因此,除了 max_digits10 被赋予特定值的特殊情况外,默认值为 0 并且因此 max_digits10 的值> 对于浮点类型的引用也是 0

关于c++ - max_digits10 在引用浮点类型时为 0 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034693/

相关文章:

c++ - 在不丢失对齐的情况下优化打包递归模板化结构

floating-point - 如何在 Elm 中将 Float 转换为 Int?

c++ - 所有双向迭代器的通用类类型,c++

c++ - 如何访问从模板类继承的私有(private)静态类成员?

c++ - boost单元测试框架中的日志级别

C++ std::array 转换

c++ - <algorithm> 是否包含 <cmath>?

C++ 它改变变量的值是因为..?

c - 将 float * 和 FILE * 传递给/从 C 中的函数传递

c++ - 你怎么能把一组数字变成大部分的整数呢?