Namespaces
Variants

std::numeric_limits<T>:: max_digits10

From cppreference.net
Utilities library
static constexpr int max_digits10
(C++11以降)

std:: numeric_limits < T > :: max_digits10 の値は、型 T のすべての異なる値を一意に表現するために必要な10進数の桁数であり、テキストへのシリアライゼーション/デシリアライゼーションに必要です。この定数はすべての浮動小数点型に対して意味を持ちます。

目次

標準特殊化

**説明:** - HTMLタグと属性はすべて元のまま保持されています - ` `タグ内のC++コードは翻訳されていません - `bool`(C++のキーワード)は翻訳されていません - `0`(数値リテラル)は翻訳されていません - 書式設定と構造は完全に保持されています この翻訳では、C++の専門用語とコード部分を保持しつつ、HTML構造を完全に維持しています。 **翻訳結果:** **説明:** - HTMLタグと属性はすべて保持されています - ` `タグ内のC++コードは翻訳対象外です - `char`はC++の予約語なので翻訳していません - 数値`0`はそのまま保持しています - フォーマットと空白文字も完全に保持されています **翻訳結果:** - C++のキーワード `signed char` は翻訳せずそのまま保持 - 数値 `0` は翻訳せずそのまま保持 - HTMLタグ、属性、クラス名は全て保持 - ` ` 内のコードは翻訳対象外 **注記:** この要素はC++のデータ型 `signed char` のデフォルト値 `0` を示すテーブル行です。C++の専門用語とコードは原文のまま保持されています。 HTMLタグ、属性、 タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しました。 HTMLタグ、属性、 タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しました。 HTMLタグ、属性、 タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しました。 **翻訳結果:** - C++のキーワード(`unsigned`、`short`)は翻訳せずそのまま保持 - 数値(`0`)は翻訳せずそのまま保持 - HTMLタグ、属性、クラス名は全て保持 - 空白文字(`​`)も保持 この翻訳では、C++の専門用語とコード構造を完全に保持しつつ、HTMLの書式も完全に維持しています。 (注:元のテキストには翻訳対象となる自然言語の文字列が含まれていないため、HTML構造とC++コードはそのまま保持されています) HTMLタグ、属性、C++固有の用語(`unsigned int`、`0`)、および` `、`
`、``タグ内のテキストは翻訳せず、元のフォーマットを保持しました。
**翻訳結果:** - C++のキーワード `unsigned long` は翻訳せずそのまま保持 - 数値 `0` は翻訳せずそのまま保持 - HTMLタグ、属性、クラス名はすべて元のまま保持 - ` ` 内のコードは翻訳対象外 この翻訳では、C++の専門用語とコード部分を保持しつつ、HTML構造とフォーマットを完全に保存しています。 **翻訳結果:** - `long long` - C++の型名のため翻訳せず - `0` - 数値のため翻訳せず - HTMLタグ、属性、コードブロック内のテキストはすべて原文のまま保持 この翻訳では、C++のキーワード`long long`と数値`0`は翻訳対象外とし、HTML構造と書式は完全に保持されています。
T std:: numeric_limits < T > :: max_digits10 の値
/* 非特殊化 */ 0
bool 0
char 0
char 0
signed char 0
unsigned char 0
wchar_t 0
char8_t (C++20以降) 0
char16_t 0
char32_t 0
short 0
unsigned short 0
int 0
unsigned int 0
long 0
unsigned long 0
long long 0
unsigned long long 0
float FLT_DECIMAL_DIG または std:: ceil ( std:: numeric_limits < float > :: digits * std:: log10 ( 2 ) + 1 )
double DBL_DECIMAL_DIG または std:: ceil ( std:: numeric_limits < double > :: digits * std:: log10 ( 2 ) + 1 )
long double DECIMAL_DIG または LDBL_DECIMAL_DIG または std:: ceil ( std:: numeric_limits < long double > :: digits * std:: log10 ( 2 ) + 1 )

注記

ほとんどの数学的操作とは異なり、浮動小数点値のテキストへの変換およびその逆変換は、少なくとも max_digits10 が使用されていれば( 9 float 用、 17 double 用)、 完全な正確さ を持ちます:中間的なテキスト表現が正確でない場合でも、同じ浮動小数点値を生成することが保証されています。 float の正確な値を10進表記で表現するには、100を超える10進数桁が必要になる場合があります。

#include <cmath>
#include <iomanip>
#include <iostream>
#include <limits>
#include <sstream>
int main()
{
    float value = 10.0000086;
    constexpr auto digits10 = std::numeric_limits<decltype(value)>::digits10;
    constexpr auto max_digits10 = std::numeric_limits<decltype(value)>::max_digits10;
    constexpr auto 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";
    const auto 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);
}

出力:

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

関連項目

[static]
指定された型の表現で使用される基数または整数の底
(public static member constant)
[static]
変更なく表現可能な radix 進数の桁数
(public static member constant)
[static]
変更なく表現可能な10進数の桁数
(public static member constant)
有効な正規化浮動小数点値となる基数の最小負べき乗より1大きい値
(public static member constant)
有効な有限浮動小数点値となる基数の最大整数べき乗より1大きい値
(public static member constant)