Obliczanie pi - zadanie pętli

0

https://i.stack.imgur.com/Id2Fb.png

Próbuje napisać program, aby dawał przybliżoną wartość pi tym wzorem. Dostaje dziwny wynik typu -4.40306e+008 przy wprowadzeniu 5.
Co robię źle?

A jak daje do int counter -1, lub pow(-1, k) to daje result 0.

int main() {

   int n;
    cout << "Wprowadź n: ";
    cin >> n;
    double result = 0;

   for (int k=0;k<n;k++){
    int counter = counter * -1;
    int divider = 2*k+1;
    result = counter/divider;
   }

   cout << "Przybliżenie liczby pi: " << endl;
   cout << result;

    return 0;
}
1

A gdzie tu sumowanie w pętli?

2
result = counter/divider;
  1. Nadpisujesz wynik, a nie sumujesz
  2. Dzielenie calkowite daje wynik całkowity - tzn np. 1/3 to 0. Użyj zmiennych typu double
0
int main() {

   int n;
   cin >> n;
    double result;
  for(int k=0; k<n; k++){
    double upper = pow(-1, k);
    double lower = (2*(double)k+1);

    result += upper/lower;
  }
    cout << result * 4;

    return 0;
}

Czy to powinno byc ok?

2

Nie ustawiasz wartości początkowej result. Ustaw na zero i powinno być ok. Cast na double przy ustawianiu lower jest zbędny, ale nieszkodliwy

2

A sprawdzałeś? Jak wyżej, i potęga też jest jest niepotrzebna.

0
int main()
{
	double result=0;
	int n; 
	for(cin>>n;n--;) result+=(((n&1)<<4)-4)/((n<<1)+1.0);
	cout<<result<<endl;
	return 0; 
}
2

Wersja od smoka poprawiona:

#include <iostream>
using namespace std;

int main()
{
    double result=0;
    int n; 
    for(cin>>n;n--;)result+=(4-((n&1)<<3))/((n*2)+1.0);
    cout<<result<<endl;
}

https://wandbox.org/permlink/P8SSZacLNxr43eq9

(krótsza i działa)

Edit: usunąłem UB, stracone 2 bajty ☹️☹️☹️

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