X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Fchart-geometry.c;h=eb0ad9282a854885768472319a899dbfba6c14ea;hb=391b4634b4b46764360c4c39ce94bb90d6e3176a;hp=736f89934b986648cc6ca1c423473a520d7676a5;hpb=43b1296aafe7582e7dbe6c2b6a8b478d7d9b0fcf;p=pspp diff --git a/src/math/chart-geometry.c b/src/math/chart-geometry.c index 736f89934b..eb0ad9282a 100644 --- a/src/math/chart-geometry.c +++ b/src/math/chart-geometry.c @@ -20,24 +20,30 @@ #include "chart-geometry.h" +static const double standard_ticks[] = {1, 2, 5, 10}; + + /* Adjust tick to be a sensible value ie: ... 0.1,0.2,0.5, 1,2,5, 10,20,50 ... */ double -chart_rounded_tick(double tick) +chart_rounded_tick (double tick) { - int i; double diff = DBL_MAX; double t = tick; - static const double standard_ticks[] = {1, 2, 5, 10}; + double factor; - const double factor = pow(10,ceil(log10(standard_ticks[0] / tick))) ; + /* Avoid arithmetic problems with very small values */ + if (fabs (tick) < DBL_EPSILON) + return 0; + + factor = pow (10,ceil (log10 (standard_ticks[0] / tick))); for (i = 3 ; i >= 0 ; --i) { - const double d = fabs( tick - standard_ticks[i] / factor ) ; + const double d = fabs (tick - standard_ticks[i] / factor); if ( d < diff ) { @@ -47,6 +53,5 @@ chart_rounded_tick(double tick) } return t; - }