1

嗨,我已经建立了一个算法来计算 pi,但我使用了 long float,所以我只得到 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个双核节点)的超级计算机,以防万一

4

3 回答 3

4

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

https://gmplib.org/

你可能想看看这个类似的线程:C++ 计算比双精度或长双精度

于 2014-12-18T19:19:48.357 回答
0

该数字的精度比您显示的要高。你只需要问它:

cout << std::setprecision(40) << pi << endl;

在Codepad上运行时,这给了我 3.141592653543740176758092275122180581093 。

对于基本计算,double应该有足够的精度如果您需要计算数百万个位置,则没有足够大的标准浮点表示来处理它。

于 2014-12-18T19:12:00.053 回答
-1
cout.precision(400);
  cout << pi << endl;
于 2014-12-18T19:31:18.097 回答