From: Miroslav Lichvar Date: Thu, 22 Jun 2017 13:35:37 +0000 (+0200) Subject: regress: fix robust regression X-Git-Tag: 3.2-pre1~46 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e118b9b1e8782274bb37164920db03086fc1dfcb;p=thirdparty%2Fchrony.git 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. --- 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;