1

e^pi - pi を評価することになっています。

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;
long double Pie();
long double Factorial(double n);
long double E();

int main()
{
    long double answer = pow(E(),Pie()) - Pie();
    cout << setprecision(20);
    cout << answer;

    return 0;
}
long double Pie()
{
    long double a = 1;
    long double b = (1 / sqrtl(2));
    long double t = (1.0 / 4.0);
    long double p = 1;

    long double aPlaceholder;
    for (int i = 1; i < 5; i++)
    {
        aPlaceholder = a;
        a = (a + b) / 2;
        b = sqrtl(aPlaceholder * b);
        t = t - p * (aPlaceholder - a) * (aPlaceholder - a);
        p = 2 * p;
    }
    long double nicePie;
    nicePie = (a + b) * (a + b) / (4 * t);
    return nicePie;
}

long double E()
{
    long double e = 0;
    for(double i = 0; i < 20; i++)
    e += 1.0 / Factorial(i);
    return e;
}

long double Factorial(double n)
{
    if(n == 0)
    return 1;
    int i = n - 1;
    while (i > 0)
    {
      n *= i;
      i--;
    }
    return n;
}

シナリオは、e を評価し、それを pi で累乗し、結果から pi を引いて、答えを画面に出力したいというものです。このシナリオのもう 1 つの側面は、これが基本的な C++ プログラムであることです。

4

2 に答える 2

4

That being said there is some calculus in your code that you do multiple times while it is not needed:

  • Pie is called twice.
  • In E(), Factorial is called at every iteration while you could multiply the previous result with i.

.

long double E()
{
  long double e = 0;
  long double fact_i = 1;
  for(double i = 1; i < 20; i++)
  {
    fact_i *= i;
    e += 1.0 / fact_i;
  }
  return e;
}
于 2012-10-25T13:06:21.220 に答える
4

cmathは、定義済みの定数としてπeを提供しM_PIM_Eの精度内で正確ですがdouble、C++ 標準では必須ではありません。

あなたはただすることができますdouble pi = acos(-1);

于 2012-10-25T12:59:15.043 に答える