Вы начинаете с 0 вместо 1 и добавляете вместо вычитания в знаменатель вашего термина, вы вычисляете новое значение increment
, используя целочисленные операции вместо плавающей запятой, и ваш цикл while
никогдавводится, потому что increments
начинается с 0.
Правильная формула: pi / 4 = сумма (k-> inf) ((-1) ^ (k + 1)) / (2k-1)
Таким образом, вы бы сделали это как:
double get_Pi(double accuracy)
{
double Pi_estimate = 0;
double increment;
double i = 1; // start at 1
int s = 1; // start with positive factor
do { // do the check at the bottom instead of the top
increment = s*(1.0/(2.0*i-1)); // use floating point constants to prevent integer division
Pi_estimate = Pi_estimate + increment;
s = -s;
i++;
} while(fabs(increment) > accuracy);
// no need to add an offset
return 4*Pi_estimate;
}