使用长双
Using long double
以下是我的C++程序。我想在变量上存储一个长数字,例如 pi,所以我尝试使用 long double。但是当我 运行 程序时它只显示 3.14159 。如何将完整的浮点数存储到变量中?
#include <iostream>
using namespace std;
int main() {
long double pi;
pi = 3.14159265358979323846264338327950288419716939937510;
cout << "PI = " << pi << endl;
return 0;
}
使用流操纵器,很简单:
#include <iostream>
#include <iomanip>
int main()
{
long double pi;
pi = 3.14159265358979323846264338327950288419716939937510L; // L for long double literal
std::cout << "PI: " << std::setprecision(20) << pi;
}
将值存储在 long double 中没有问题(实际上精度有问题)。问题在于打印它。
试试这个:
cout << "PI = " << setprecision(40) << pi << endl;
如果你尝试上面的方法,你会发现实际打印的值会在一些小数位(我猜是 18-25)之后开始失去精度。 long double 的精度在 c/c++ 中是 实现定义 。因此,您需要检查您的系统以了解 long double 可以存储的最大精度。
这里的问题是 long double
的精度也有限。考虑这个 (C++11
)
#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
int main() {
cout.precision(51);
std::string pi("3.14159265358979323846264338327950288419716939937510");
cout << pi << endl;
cout << stold(pi) << endl;
cout << M_PIl << endl; /// The constant from <math.h>
}
输出
3.14159265358979323846264338327950288419716939937510
3.14159265358979323851280895940618620443274267017841
^ value changes from here (18th decimal place)
3.14159265358979323851280895940618620443274267017841
以下是我的C++程序。我想在变量上存储一个长数字,例如 pi,所以我尝试使用 long double。但是当我 运行 程序时它只显示 3.14159 。如何将完整的浮点数存储到变量中?
#include <iostream>
using namespace std;
int main() {
long double pi;
pi = 3.14159265358979323846264338327950288419716939937510;
cout << "PI = " << pi << endl;
return 0;
}
使用流操纵器,很简单:
#include <iostream>
#include <iomanip>
int main()
{
long double pi;
pi = 3.14159265358979323846264338327950288419716939937510L; // L for long double literal
std::cout << "PI: " << std::setprecision(20) << pi;
}
将值存储在 long double 中没有问题(实际上精度有问题)。问题在于打印它。
试试这个:
cout << "PI = " << setprecision(40) << pi << endl;
如果你尝试上面的方法,你会发现实际打印的值会在一些小数位(我猜是 18-25)之后开始失去精度。 long double 的精度在 c/c++ 中是 实现定义 。因此,您需要检查您的系统以了解 long double 可以存储的最大精度。
这里的问题是 long double
的精度也有限。考虑这个 (C++11
)
#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
int main() {
cout.precision(51);
std::string pi("3.14159265358979323846264338327950288419716939937510");
cout << pi << endl;
cout << stold(pi) << endl;
cout << M_PIl << endl; /// The constant from <math.h>
}
输出
3.14159265358979323846264338327950288419716939937510
3.14159265358979323851280895940618620443274267017841
^ value changes from here (18th decimal place)
3.14159265358979323851280895940618620443274267017841