numeric_limits::digits10的确切含义是什么?
stackoverflow中的其他一些相关问题使我认为这是double的最大精度,但是

  • 当精度大于17(== 2 + numeric_limits::digits10)时,以下原型(prototype)开始工作(成功为真)
  • 使用STLPort,最后读取double == infinity;使用Microsoft的STL,readDouble == 0.0。
  • 这个原型(prototype)有什么意思:)?

  • 这是原型(prototype):
    #include <float.h>
    #include <limits>
    #include <math.h>
    #include <iostream>
    #include <iomanip>
    #include <sstream>
    #include <string>
    int main(int argc, const char* argv[]) {
      std::ostringstream os;
      //int digit10=std::numeric_limits<double>::digits10; // ==15
      //int digit=std::numeric_limits<double>::digits; // ==53
      os << std::setprecision(17);
      os << DBL_MAX;
      std::cout << os.str();
      std::stringbuf sb(os.str());
      std::istream is(&sb);
      double readDouble=0.0;
      is >> readDouble;
      bool success = fabs(DBL_MAX-readDouble)<0.1;
    }
    

    最佳答案

    numeric_limits::digits10是可以保留而不会丢失的小数位数。

    例如numeric_limits<unsigned char>::digits10为2。这意味着未签名的char可以保存0..99而不会丢失。 如果为3,则可以容纳0..999,但是众所周知,它只能容纳0..255。

    This manual page有一个浮点数示例,(缩短时)显示

    cout << numeric_limits<float>::digits10 <<endl;
    float f = (float)99999999; // 8 digits
    cout.precision ( 10 );
    cout << "The float is; " << f << endl;
    

    版画
    6
    The float is; 100000000
    

    关于c++ - numeric_limits <double>::digits10的含义是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/747470/

    10-10 05:37