chiark / gitweb /
first stab at experimental cquad algorithm; doesn't work well yet, so not in make...
[nlopt.git] / mma / mma.c
index da60e2037fb28f8486ad9e1aac588bc0b71acfcb..0ceffdf7b3ceb711afe8f1d4c33aec9f4da71936 100644 (file)
--- a/mma/mma.c
+++ b/mma/mma.c
@@ -101,7 +101,7 @@ static double dual_func(int m, const double *y, double *grad, void *d_)
               dx = -sigma[j] * (0.5 * a + 0.125 * a*a*a);
          }
          else
-              dx = (v/u)*sigma2 * (-1 + sqrt(1 - sqr(u/(v*sigma[j]))));
+              dx = (v/u)*sigma2 * (-1 + sqrt(fabs(1 - sqr(u/(v*sigma[j])))));
          xcur[j] = x[j] + dx;
          if (xcur[j] > ub[j]) xcur[j] = ub[j];
          else if (xcur[j] < lb[j]) xcur[j] = lb[j];