嗨我已经构建了一个计算pi的算法,但我使用长浮点数,所以我得到3.14159因此,我需要更高的精度。怎么样? 这是代码:
#include <iostream>
#include <math.h>
using namespace std;
int main ()
{
long double a, l, p, pi, r;
long long int n, m;
r = 100000;
a = r * sqrt (3) / 2 ;
n = 100000;
m = 6;
while (n > m)
{
a = sqrt (r / 2 * (r + a));
m = m * 2 ;
}
l = sqrt (4 * (pow (r, 2) - pow (a, 2)));
p = m * l;
pi = p / (2 * r) ;
cout << pi << endl;
cout << "number of corners used: " << m << endl;
return 0;
}
顺便提一下,我的高中有一个24核(12个双核节点)超级计算机,以防万一
答案 0 :(得分:4)
如果你真的想要更高的精度(不只是显示更多小数位),你可以考虑使用GMP(Gnu多精度)库。您可以指定用于双精度的字节数(8个字节,16个字节,32个字节,64个字节,128个字节,......)。该库通常用于cryto算法(需要非常大的整数)。
您可能希望查看此类似帖子:C++ calculating more precise than double or long double
答案 1 :(得分:0)
这个数字比你显示的更精确。你只需要它:
cout << std::setprecision(40) << pi << endl;
在Codepad上运行时,这给了我3.141592653543740176758092275122180581093。
由于double
的方式应该具有足够的基本计算精度。如果你需要计算数百万个地方,那么就没有足够大的标准浮点表示来处理它。
答案 2 :(得分:-1)
cout.precision(400);
cout << pi << endl;