Вычисление пи с серией - PullRequest
       27

Вычисление пи с серией

0 голосов
/ 11 декабря 2018

Я хочу вычислить число Пи, используя алгоритм Рабиновича Спинота.Это бесконечная сумма, которая состоит из двух факториалов и одной степени:

Дело в том, что я написал простые программы для вычисления факториалов и степеней, но мне нужно объединить их в один цикл for.И подсчитайте сумму.

Вот что я сделал первым:

Но это не работает.Правильно ли исходная идея вычисления числа пи?Можно ли вычислить число Пи с этими рядами?Если да, то в чем здесь моя ошибка?Любая помощь будет оценена. Спасибо заранее

#include <stdio.h>

int main()
{
  float factorialn,n,sqr,power,factoriald,f;
  factorialn=1;
  n=10;
  power=2;
  factoriald=1;
  for(int i=1;i<=n;i++)
  {
    factorialn*=i;
  }
  sqr=factorialn*factorialn;
  for(int i=1;i<=n;i++)
  {
    power=power*2;
  }
  for(int i=1;i<=2*n+1;i++)
  {
    factoriald=factoriald*i;
  }
  printf("factorialn square is: %10f",sqr);
  printf("Pow of 2 to the n+1: %10f",power);
  printf("Factoriald: %10f",factoriald);

  return 0;
}

Второй код:

#include <stdio.h>

int main()  
{
  unsigned long long factorialn,n,sqr,power,factoriald,f;
  double sum;
  factorialn=1;
  n=10;
  power=2;
  factoriald=1;
  for(int i=1;i<=n;i++)
  {
    factorialn*=i;
    power=power*2;
    for(int j=1;j<=2*n+1;j++)
    {
      factoriald=factoriald*j;
    }
    sum+=factorialn*factorialn*power/factoriald;

  }
  printf("summa %1.16lf\n;",sum);  
  return 0;
}

1 Ответ

0 голосов
/ 11 декабря 2018

21!слишком велик для длинных длинных 64-битных без знака.

Я изменил все на long double, инициализировал sum с помощью 2 и переделал цикл factoriald, используя i.

#include <stdio.h>

int main(void) {
    long double factorialn, n, power, factoriald;
    long double sum = 2;
    factorialn = 1;
    n = 10;
    power = 2;
    factoriald = 1;
    for (int i = 1; i <= n; i++) {
        factorialn *= i;
        power *= 2;
        for (int j = 2 * i; j <= 2 * i + 1; j++) {
            factoriald *= j;
        }
        sum += factorialn * factorialn * power / factoriald;
    }
    printf("summa %1.16Lf\n", sum);
    return 0;
}

https://ideone.com/Fb8c88

...