wzór Wallisa na obliczanie liczby PI

0

Witam!

Mam do napisania program:

Liczbę PI
2 można wyznaczyć stosując wzór Wallisa będący iloczynem nieskończonym, danym wzorem:

http://imageshack.us/f/535/wzorx.png/

Napisać funkcję pi wyznaczającą przybliżoną wartość liczby PI przy pomocy iloczynu n (gdzie n jest parametrem
funkcji) kolejnych czynników ze wzoru Wallisa.
W funkcji main wywołać funkcję pi dla n=1000. Wynik zwrócony przez funkcję wypisać na konsolę.
Prawidłowo napisana funkcja, dla n=1000 przybliża wartość PI z dokładnością do 2 miejsc po przecinku.

No i robie coś takiego:


#include <iostream>
#include <cstdlib>

using namespace std;

long PI(long iloczyn)
{
    long mianownik, licznik, n,j;

    licznik = ((2*i)*(2*i));
    mianownik = ((2*i-1)*(2*i+1));

    for (j=1; j < n; j++)
    {
        iloczyn= licznik/mianownik;

    }

    return iloczyn;
}

int main()
{
    int n;

    cout << "Podaj parametr funkcji: ";
    cin >> n;

    cout << PI(n);

system("PAUSE");
}

Jak ten program doprowadzić do użyteczności?

0

pi nie jest liczbą całkowitą, więc wypadałoby żeby funkcja też nie zwracała ani nie obliczała liczby całkowitej jako wyniku :P

0

raz policzyłeś licznik i mianownik (z nie wiadomo jakiego i) , a w pętli nic się z nimi nie dzieje
pętla kręci się do n
iloczyn ten zbiega się bardzo wolno, uwaga na zakres int, bo już 46341^2 == -2147479015 (minus!!)

0

Spoko juz udało mi się to zrobić:) Załączam kod:

#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

double PI(double n)
{
    double mianownik, licznik, i;

    double iloczyn= 1;

    for ( i= 1; i<=n; i++)
    {
        licznik =  (4*i*i);
        mianownik = ((2*i)-1)*((2*i)+1);
       iloczyn *= (licznik/mianownik);

    }

    return (2*iloczyn);
};

int main()
{
    cout << "Wzor Wallisa na PI" << endl << endl;

    unsigned int n = 1000;
    cout.precision(3);
    cout << endl;
    cout << PI(n) << endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
0

ups

0

chyba zbyt dosłownie potraktował moją uwagę :P to co jest liczbą całkowitą powinno być całkowitą (licznik np.)

0

Hehehe no lepiej tutaj pasuje liczba podwójnej precyzji xd ważne ,że działa i nie bedziemy się tu rozdrabniać nad tym ;d jutro musze kolejne milion programów ogarnąć ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0