Listing 1: The basic state machine
double minimize(double (*f)(double), double x0, double x1)
{
typedef enum { INIT, RUN, SUCCEED, FAIL } STATE;
static STATE state = INIT;
for (int n = 100; n >= 0; n--) {
switch (state){
case INIT:
state = RUN;
break;
case RUN:
state = SUCCEED;
break;
case SUCCEED:
return (x0+x1)/2;
break;
case FAIL:
cout << "minimize: Function failed to converge\n";
n = 0;
break;
}
if (n == 1) state = FAIL;
}
return (x0+x1)/2;
}