Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::numeric_limits<T>::max_digits10

      From cppreference.com
      <cpp‎ |types‎ |numeric limits
       
       
      Utilities library
       
       
      std::numeric_limits
      Static constants
      numeric_limits::max_digits10
      (C++11)
      Static member functions
      Helper types
       
      staticconstexprint max_digits10
      (since C++11)

      The value ofstd::numeric_limits<T>::max_digits10 is the number of base-10 digits that are necessary to uniquely represent all distinct values of the typeT, such as necessary for serialization/deserialization to text. This constant is meaningful for all floating-point types.

      Contents

      [edit]Standard specializations

      T Value ofstd::numeric_limits<T>::max_digits10
      /* non-specialized */0
      bool0
      char0
      signedchar0
      unsignedchar0
      wchar_t0
      char8_t(since C++20)0
      char16_t0
      char32_t0
      short0
      unsignedshort0
      int0
      unsignedint0
      long0
      unsignedlong0
      longlong0
      unsignedlonglong0
      floatFLT_DECIMAL_DIG orstd::ceil(std::numeric_limits<float>::digits*std::log10(2)+1)
      doubleDBL_DECIMAL_DIG orstd::ceil(std::numeric_limits<double>::digits*std::log10(2)+1)
      longdoubleDECIMAL_DIG orLDBL_DECIMAL_DIG orstd::ceil(std::numeric_limits<longdouble>::digits*std::log10(2)+1)

      [edit]Notes

      Unlike most mathematical operations, the conversion of a floating-point value to text and back isexact as long as at leastmax_digits10 were used (9 forfloat,17 fordouble): it is guaranteed to produce the same floating-point value, even though the intermediate text representation is not exact. It may take over a hundred decimal digits to represent the precise value of afloat in decimal notation.

      [edit]Example

      Run this code
      #include <cmath>#include <iomanip>#include <iostream>#include <limits>#include <sstream> int main(){float value=10.0000086; constexprauto digits10=std::numeric_limits<decltype(value)>::digits10;constexprauto max_digits10=std::numeric_limits<decltype(value)>::max_digits10;constexprauto submax_digits10= max_digits10-1; std::cout<<"float:\n""       digits10 is "<< digits10<<" digits\n""   max_digits10 is "<< max_digits10<<" digits\n""submax_digits10 is "<< submax_digits10<<" digits\n\n"; constauto original_precision=std::cout.precision();for(auto i=0; i<5;++i){std::cout<<"   max_digits10: "<<std::setprecision(max_digits10)<< value<<"\n""submax_digits10: "<<std::setprecision(submax_digits10)<< value<<"\n\n";         value=std::nextafter(value,std::numeric_limits<decltype(value)>::max());}std::cout.precision(original_precision);}

      Output:

      float:       digits10 is 6 digits   max_digits10 is 9 digitssubmax_digits10 is 8 digits    max_digits10: 10.0000086submax_digits10: 10.000009    max_digits10: 10.0000095submax_digits10: 10.00001    max_digits10: 10.0000105submax_digits10: 10.00001    max_digits10: 10.0000114submax_digits10: 10.000011    max_digits10: 10.0000124submax_digits10: 10.000012

      [edit]See also

      [static]
      the radix or integer base used by the representation of the given type
      (public static member constant)[edit]
      [static]
      number ofradix digits that can be represented without change
      (public static member constant)[edit]
      [static]
      number of decimal digits that can be represented without change
      (public static member constant)[edit]
      [static]
      one more than the smallest negative power of the radix that is a valid normalized floating-point value
      (public static member constant)[edit]
      [static]
      one more than the largest integer power of the radix that is a valid finite floating-point value
      (public static member constant)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/types/numeric_limits/max_digits10&oldid=161754"

      [8]ページ先頭

      ©2009-2025 Movatter.jp