Функция для вычисления Пи в C - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь закодировать формулу, в которой пользователь вводит число n для вычисления Pi, используя Pi = n ^ 2 / (n-1) (n + 1) . Но по какой-то причине вывод неправильный. Я не знаю, неверна ли моя математика или что-то не так с функцией.

Вот код:

#include <stdio.h>
#include <math.h>
double pi_array (int n)
{
    int i;
    double a;
    if (n%2==0)
    {
        for (i=2;i<=n;i+=2)
        {
            a=pow(n,2)/((n-1)*(n+1));
        }
    }
    return a;
}

double pi_value (int n)
{
    int i;
    double pi;
    for (i=0;i<=n;i++)
    {
       pi=pi_array(n);
    }
    return pi;
}

void main()
{
    int n;
    scanf("%d",&n);
    printf ("%lf\n", pi_value(n));
}

1 Ответ

1 голос
/ 25 марта 2020

Точно так же, как указал @Mat, в этой части вашего кода:

   for (i=2;i<=n;i+=2)
    {
        a=pow(n,2)/((n-1)*(n+1));
    }

Он снова и снова выполняет одно и то же вычисление, потому что n не меняет своего значения. Ответ pow(n,2)/((n-1)*(n+1)) остается неизменным даже для всех итераций.

Кроме того, на заметку, какую формулу вы используете для расчета своего ответа? Если вы поставите n = 4, вы получите значение 16/15, равное 1,0667. Для n = 5 ответ - 1.041667. Они явно не равны pi. Я думаю, что сама формула может быть неправильной. Вы можете опубликовать вопрос о формуле на MathStackExchange , чтобы получить представление о том, что такое точная формула, а затем реализовать ее в C позже:).

Best.

...