From c2944d8727cdd989f86f52cdb657599c3a717a7b Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 27 Jun 2017 10:03:05 +0200 Subject: [PATCH] regress: speed up range expansion in robust regression Instead of repeatedly expanding the range of b with the same increment, double the range on each iteration to speed up the expansion. Also, add a sanity check for the interval. --- regress.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/regress.c b/regress.c index c4f8dd5..ea8cbec 100644 --- a/regress.c +++ b/regress.c @@ -566,24 +566,18 @@ RGR_FindBestRobustRegression Estimate standard deviation of b and expand range about b based on that. */ sb = sqrt(s2 * W/V); - if (sb > tol) { - incr = 3.0 * sb; - } else { - incr = 3.0 * tol; - } + incr = MAX(sb, tol); - blo = b; - bhi = b; - do { - /* Make sure incr is significant to blo and bhi */ - while (bhi + incr == bhi || blo - incr == blo) { - incr *= 2; - } + incr *= 2.0; + + /* Give up if the interval is too large */ + if (incr > 100.0) + return 0; + + blo = b - incr; + bhi = b + incr; - blo -= incr; - bhi += incr; - /* We don't want 'a' yet */ eval_robust_residual(x + start, y + start, n_points, blo, &a, &rlo); eval_robust_residual(x + start, y + start, n_points, bhi, &a, &rhi);