Чем можно заменить функцию pow при вычислениях степеней?

Имеется следующий код:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()  {   

const double eps = 10e-4;   
double x,s = 0,Sn,f;  
int n;   
printf ("Введите число x = ");   
scanf ("%lf", &x);   
if ((fabs(x-(-0.5)) > eps) && (fabs(x-0.5) > eps)) {
    while (-0.5 < x != x < 0.5)
    {
      printf ("Необходимо ввести значение x только из промежутка |x|<0.5, x = ");
      scanf ("%lf", &x);
    }   
} for (n=0;; n++) {
    Sn = (1+ pow(-1,n)* pow(2,n+1))* pow(x,n);
    if (fabs(Sn)<eps) 
        break;
    else s += Sn;   
}   
f = 3/((1-x)*(1+2*x));   
printf ("Значение функции S = %lf\n",s);   
printf ("Значение функции f = %lf",f);  
return 0;
}

Необходимо заменить функцию pow на другую структуру (например какой-нибудь цикл), но ума не приложу как это можно реализовать

Сама задача:

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Harry

Например, так:

double f(double x, double eps)
{
    double s = 3, p1 = 1, p2 = 2, t = 3;
    for(; abs(t) > eps;)
    {
        p2 *= -2*x;
        p1 *= x;
        s += (t = p1+p2);
    }
    return s;
}
→ Ссылка