Я новичок в 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
Я не получаю ни одного из этих номеров. Однако я заметил, что когда я добавляю нечетное число, я получаю отрицательное число и наоборот с четными числами. Все, что я написал в своей программе, — это все, чему я научился в своем классе, так что я не могу выйти за рамки написанного. Любая помощь или объяснение приветствуются.
У вас есть if / else для определения знака, но вы также делаете pow(-1, terms)
, Я бы просто избавился от pow
и заменить его на 1
, так как вы уже делаете partial +=
а также partial -=
в зависимости от i
странный или четный Кроме того, я думаю, что ваш +=
а также -=
должно быть наоборот.
Попробуй это:
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";
}