для цикла — Приближение C ++ Pi с использованием формулы Лейбница

Я новичок в C ++ и сам программирую, поэтому, пожалуйста, прости меня за словарный запас. Я не смог найти этот конкретный вопрос, но похожие в интернете, но мне все еще трудно найти нужный мне результат.

Итак, я использую формулу Лейбница для аппроксимации пи, которая:

pi = 4 · [1 — 1/3 + 1/5 — 1/7 + 1/9… + (–1 ^ n) / (2n + 1)].

Я написал компилируемая и запускаемая программа , но основная часть кода, которая меня беспокоит:

if (terms > 0){

double partial = 0;

for (i = 0; i < terms; i++)
if (i % 2 == 0)
partial -= (pow(-1,terms))/((2.0 * i) + 1);
else
partial += (pow(-1,terms))/((2.0 * i) + 1);

double newPi = 4 * partial;

cout << "The approximation is " << newPi << " using " << terms << " terms.\n";

}

Если слагаемые = 3, приближение = 2,895

Если слагаемые = 10, приближение = 3,232

Если слагаемые = 50, приближение = 3,161

Я не получаю ни одного из этих номеров. Однако я заметил, что когда я добавляю нечетное число, я получаю отрицательное число и наоборот с четными числами. Все, что я написал в своей программе, — это все, чему я научился в своем классе, так что я не могу выйти за рамки написанного. Любая помощь или объяснение приветствуются.

1

Решение

У вас есть if / else для определения знака, но вы также делаете pow(-1, terms), Я бы просто избавился от pow и заменить его на 1, так как вы уже делаете partial += а также partial -= в зависимости от i странный или четный Кроме того, я думаю, что ваш += а также -= должно быть наоборот.

4

Другие решения

Попробуй это:

if (terms > 0){
double partial = 0;
for (i = 0; i <= terms; i++)
partial += pow(-1,i)/(2.0 * i + 1);
double newPi = 4 * partial;
cout << "The approximation is " << newPi << " using " << terms << " terms.\n";
}
0