fix tests : we perform slightly worse because we do use one more function
evaluation in our numericaldiff than what (c)minpack did
diff --git a/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h b/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h
index 4e05652..f541c38 100644
--- a/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h
+++ b/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h
@@ -55,7 +55,7 @@
             );
 
     static Status lmdif1(
-            FunctorType &_functor,
+            FunctorType &functor,
             Matrix< Scalar, Dynamic, 1 >  &x,
             int *nfev,
             const Scalar tol = ei_sqrt(epsilon<Scalar>())
@@ -200,9 +200,13 @@
 
     /* calculate the jacobian matrix. */
 
-    if (functor.df(x, fjac) < 0)
+    int df_ret = functor.df(x, fjac);
+    if (df_ret<0)
         return UserAsked;
-    ++njev;
+    if (df_ret>0)
+        // numerical diff, we evaluated the function df_ret times
+        nfev += df_ret;
+    else njev++;
 
     /* compute the qr factorization of the jacobian. */
 
@@ -702,10 +706,8 @@
     lm.parameters.maxfev = 200*(n+1);
 
     Status info = Status(lm.minimize(x));
-
     if (nfev)
         * nfev = lm.nfev;
-
     return info;
 }
 
diff --git a/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h b/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h
index 276b315..dcd4358 100644
--- a/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h
+++ b/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h
@@ -74,6 +74,7 @@
         val1.resize(Functor::values());
         val2.resize(Functor::values());
 
+        // initialization
         switch(mode) {
             case Forward:
                 // compute f(x)
@@ -86,8 +87,7 @@
                 assert(false);
         };
 
-        /* Function Body */
-
+        // Function Body
         for (int j = 0; j < n; ++j) {
             h = eps * ei_abs(x[j]);
             if (h == 0.) {