1

Visual Studio Community 2019 v16.4.2 と 64 ビット Win10 に付属する最新のものを使用します。

さまざまなデータ型の制限をテストしているときに奇妙なバグが発生しましたが、numeric_limits は double と long double の最小/最大値を区別できません。デフォルトの GNU Mac ツール チェーンで NetBeans を使用して、より合理的な結果を表示します。

    // Type limits: float
    std::cout 
        << "MIN float        " << numeric_limits<float>::min() << "\n"
        << "MAX float        " << numeric_limits<float>::max() << "\n"
        << "MIN double       " << numeric_limits<double>::min() << "\n"
        << "MAX double       " << numeric_limits<double>::max() << "\n"
        << "MIN long double  " << numeric_limits<long double>::min() << "\n"
        << "MAX long double  " << numeric_limits<long double>::max() << "\n";

コンソール出力

MIN float        1.17549e-38
MAX float        3.40282e+38
MIN double       2.22507e-308
MAX double       1.79769e+308
MIN long double  2.22507e-308    // NetBeans on Mac 3.3621e-4932
MAX long double  1.79769e+308    // NetBeans on Mac 1.18973e+4932
4

2 に答える 2

8

C++ 標準long doubleは、少なくとも の精度のみを必要とするdoubleため、プログラムの出力に問題はありません。

標準からの引用 (§3.9.1、lit 8):

浮動小数点型には、float、double、および long double の 3 つがあります。 double 型は少なくとも float と同じ精度を提供し、型long double は少なくとも double と同じ精度を提供します。 float 型の値のセットは次のとおりです。 double 型の値のセットのサブセット。double 型の値のセットは、long double 型の値のセットのサブセットです。浮動小数点型の値表現は実装定義です。整数型と浮動小数点型をまとめて算術型と呼びます。標準テンプレート std::numeric_limits (18.3) の特殊化は、実装の各算術型の最大値と最小値を指定するものとします。

于 2020-01-06T12:25:20.053 に答える
1

long doubledoubleVisual Studio を使用しても同等です。

との両方doublelong double64 ビットが含まれています。1 は符号、11 は指数、52 は仮数です。その範囲は少なくとも 15 桁の精度で +/-1.7E308 です。

これは、c++ 標準に対応しています。long double少なくとも の精度が必要なだけですdouble。公式リファレンスについては、こちらを参照してください。

于 2020-01-06T12:25:05.850 に答える