#include<stdio.h>
#include<math.h>
double f(double x)
{
return (8*x*x*x-2*x*x-7*x+3);
}
void main ()
{
double h=0.001,a1=1,a2=a1+h,a3,y1=f(a1),y2=f(a2),y3;
double c,c1,c2,d,e,g;
if (y2>y2)
{a3=a1,h=-h,y3=y1;
do{
a1=a2,h=-h,y3=y1;
a3=a2+h,y2=f(a3);
h=2*h;
} while(y3<y2);
printf ("a1=%f\t a2=%f\t a3=%f\t y1=%f\t y2=%f\t y3=%f\t",a1,a2,a3,y1,y2,y3);
}
else
{a3=a2+h,y3=f(a3);
do{
a1=a2,y1=y2,a2=a3,y2=y3;
a3=a2+h,y3=f(a3);
h=2*h;
}while (y3<y2);
printf ("a1=%f\t a2=%f\t a3=%f\t y1=%f\t y2=%f\t y3=%f\t",a1,a2,a3,y1,y2,y3);
}
c=a1,d=a3;
printf("c=%f\t f(c)=%f\t d=%f\t f(d)=%f\t",c,f(c),d,f(d));
c1=d-0.618*(d-c);
c2=c+0.618*(d-c);
e=1-f(c)/f(d);
g=f(c1)/f(c2)-1;
printf ("c1=%f f(c1)=%f c2=%f f(c2)=%f e=%f g=%f",c1,f(c1),c2,f(c2),e,g);
printf("\n");
do
{{if(f(c1)-f(c2)>0)
c=c1;
else
d=c2;}
g = f(c1)/f(c2)-1;
printf ("c=%f f(c)=%f d=%f f(d)=%f",c,f(c),d,f(d));
c1=d-0.618*(d-c);
c2=c+0.618*(d-c);
e=1-f(c)/f(d);
printf ("c1=%f f(c1)=%f c2=%f f(c2)=%f e=%f g=%f",c1,f(c1),c2,f(c2),e,g);
printf("\n");
} while (fabs(e)>0.001||fabs(g)>0.001);
printf("a*=%f ",(c+d)/2);
printf("f(a*)=%f ",f((c+d)/2));
}