From e118b9b1e8782274bb37164920db03086fc1dfcb Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Thu, 22 Jun 2017 15:35:37 +0200 Subject: [PATCH] regress: fix robust regression The bisection always terminated after one iteration. Change the code to check if the middle is different from the lower and upper limits as suggested in the original recipe. This fixes commit b14689d59b06ec21a9e079c65a0882b7bf457448. --- regress.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/regress.c b/regress.c index cac0332d..c4f8dd58 100644 --- a/regress.c +++ b/regress.c @@ -594,6 +594,8 @@ RGR_FindBestRobustRegression /* OK, so the root for b lies in (blo, bhi). Start bisecting */ do { bmid = 0.5 * (blo + bhi); + if (!(blo < bmid && bmid < bhi)) + break; eval_robust_residual(x + start, y + start, n_points, bmid, &a, &rmid); if (rmid == 0.0) { break; @@ -606,7 +608,7 @@ RGR_FindBestRobustRegression } else { assert(0); } - } while ((bhi - blo) > tol && (bmid - blo) * (bhi - bmid) > 0.0); + } while (bhi - blo > tol); *b0 = a; *b1 = bmid; -- 2.47.3