1

こんにちは、円周率を計算するアルゴリズムを構築しましたが、長い浮動小数点数を使用しているため、結果として 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 Multi-precision) ライブラリの使用を検討できます。double に使用するバイト数を指定できます (8 バイト、16 バイト、32 バイト、64 バイト、128 バイト、...)。ライブラリは通常、cryto アルゴリズム (非常に大きな整数を必要とする) に使用されます。

https://gmplib.org/

おそらく、この同様のスレッドを見たいと思うでしょう: C++ calculate more accuracy than double or long double

于 2014-12-18T19:19:48.357 に答える
0

その数値には、表示しているよりも精度があります。あなたはそれを求めるだけです:

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

Codepadで実行すると、 3.141592653543740176758092275122180581093 が得られます。

基本的な計算には十分な精度が必要ですdouble。何百万もの場所を計算する必要がある場合、それを処理するのに十分な大きさの標準の浮動小数点表現はありません。

于 2014-12-18T19:12:00.053 に答える