There are wrong answer when cout the long double value, C++

Ann*_*Ann 2 c++

#include <iostream>
#include <iomanip>
#include <limits>

using namespace std;

int main() {
    const long double longDoublePI = 3.141592653589793238;
    cout << setw(16) << "longDoublePI = " << setprecision(numeric_limits<long double>::digits10 + 1) << longDoublePI << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

But the result output is:

longDoublePI = 3.141592653589793116

Why the answer is wrong?

Lig*_*ica 5

因为,虽然longDoublePI是 a long double但您初始化它的文字只是 adouble,它没有那么高的精度。

您可以改用它:

const long double longDoublePI = 3.141592653589793238L;
//                                                   ^
Run Code Online (Sandbox Code Playgroud)