From 0f281a41e3d6172c989bbb3249610cce795da1fd Mon Sep 17 00:00:00 2001 From: Daniel Waggoner <dwaggoner@frbatlanta.org> Date: Tue, 22 Feb 2011 17:33:14 -0500 Subject: [PATCH] killed bug in dw_histogram.c caused by uninitialized variable (cherry picked from commit 7663b6d5488896126a95e697cbf843277de9f1ac) --- histogram/dw_histogram.c | 89 +++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 52 deletions(-) diff --git a/histogram/dw_histogram.c b/histogram/dw_histogram.c index 9f8fdda..d38c54f 100644 --- a/histogram/dw_histogram.c +++ b/histogram/dw_histogram.c @@ -692,10 +692,10 @@ static TMatrix MakeHistogramAuto(int low, int *h, int high, PRECISION min, PRECI PRECISION inc=(max-min)/intervals, max_out, min_out; int lo, hi; - if ((low == sample_size) || (inc <= 0)) + if ((low == sample_size) || (high == sample_size) || (inc <= 0)) { - min_out=min-1.0; - max_out=min+1.0; + min_out=min-0.5; + max_out=min+0.5; } else { @@ -704,60 +704,45 @@ static TMatrix MakeHistogramAuto(int low, int *h, int high, PRECISION min, PRECI else for (lo=0; (lo < intervals) && !h[lo]; lo++); - if (lo == intervals) - { - min_out=max-1.0; - max_out=max+1.0; - } + if (high > 0) + hi=intervals; else + for (hi=intervals-1;(hi >= 0) && !h[hi]; hi--); + + if (lo >= 0) { - if (high > 0) - hi=intervals; + min_out=min+lo*inc; + if (hi < intervals) + max_out=min+(hi+1)*inc; else - for (hi=intervals-1; !h[hi]; hi--); - - if (lo >= 0) - if (hi < intervals) - { - min_out=min+lo*inc; - max_out=min+(hi+1)*inc; - } - else - { - min_out=min+lo*inc; - if (bins == 1) - max_out=(1+SQRT_MACHINE_EPSILON)*max; - else - { - inc=(1-SQRT_MACHINE_EPSILON)*(max - min_out)/(PRECISION)(bins-1); - max_out=max + inc; - } - } - else - if (hi < intervals) - { - max_out=min+(hi+1)*inc; - if (bins == 1) - min_out=(1-SQRT_MACHINE_EPSILON)*min; - else - { - inc=(1-SQRT_MACHINE_EPSILON)*(max_out - min)/(PRECISION)(bins-1); - min_out=min - inc; - } - } - else - if (bins <= 2) - { - min_out=(1-SQRT_MACHINE_EPSILON)*min; - max_out=(1+SQRT_MACHINE_EPSILON)*max; - } + { + if (bins == 1) + max_out=(1.0+SQRT_MACHINE_EPSILON)*max; else - { - inc=(1-SQRT_MACHINE_EPSILON)*(max_out - min)/(PRECISION)(bins-2); - min_out=min - inc; - max_out=max +inc; - } + max_out=max + (1.0-SQRT_MACHINE_EPSILON)*(max - min_out)/(PRECISION)(bins-1); + } } + else + if (hi < intervals) + { + max_out=min+(hi+1)*inc; + if (bins == 1) + min_out=(1.0-SQRT_MACHINE_EPSILON)*min; + else + min_out=min - (1.0-SQRT_MACHINE_EPSILON)*(max_out - min)/(PRECISION)(bins-1); + } + else + if (bins <= 2) + { + min_out=(1.0-SQRT_MACHINE_EPSILON)*min; + max_out=(1.0+SQRT_MACHINE_EPSILON)*max; + } + else + { + inc=(1.0-SQRT_MACHINE_EPSILON)*(max - min)/(PRECISION)(bins-2); + min_out=min - inc; + max_out=max + inc; + } } return MakeHistogram(low,h,min,max,intervals,sample_size,min_out,max_out,bins); -- GitLab