如何在c ++中使用更高的精度

时间:2014-12-18 19:07:55

标签: c++ precision pi long-double

嗨我已经构建了一个计算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个双核节点)超级计算机,以防万一

3 个答案:

答案 0 :(得分:4)

如果你真的想要更高的精度(不只是显示更多小数位),你可以考虑使用GMP(Gnu多精度)库。您可以指定用于双精度的字节数(8个字节,16个字节,32个字节,64个字节,128个字节,......)。该库通常用于cryto算法(需要非常大的整数)。

https://gmplib.org/

您可能希望查看此类似帖子: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;