From: Miroslav Lichvar Date: Tue, 27 Jun 2017 08:03:05 +0000 (+0200) Subject: regress: speed up range expansion in robust regression X-Git-Tag: 3.2-pre1~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2944d8727cdd989f86f52cdb657599c3a717a7b;p=thirdparty%2Fchrony.git 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. --- diff --git a/regress.c b/regress.c index c4f8dd58..ea8cbecc 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);