Przedstawienie liczby Pi metodą Wallisa – błędny wynik

0

Chciałbym metodą Wallisa przedstawic liczbe pi mianowicie

Pi = (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*(8/7)*...

Napisalem program:

int n;
   cin>>n;
    double p,pi=1.0;
    for(int i=2;i<=n;i+=2)
    {
        pi *=((p=i)/(i-1))*(p/(i+1));

    }
     cout<<pi;

Wynik wychodzi błędny i nie rozumiem problemu, proszę o pomoc.

2

Czy jest jakiś powód dla którego przypisanie do p nie może zostać wyłączone do osobnego wyrażenia? Masz tu UB, bo nie ma gwarancji wykonania operacji od lewej do prawej w tym przypadku.

Dodatkowo: metoda Wallisa wyznacza π/2.

0

własnie nic to nie daje bo przed chwilą spróbowałem

p=i;
        pi *=((p)/(i-1))*(p/(i+1));
0

a no faktycznie.. ten wzor jest na pi/2, wszystko juz się zgadza, dziekuję

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