[rrd-users] logarithmic scale question
Tobias Oetiker
tobi at oetiker.ch
Wed Jul 23 20:34:44 CEST 2008
Hi Karl,
this sounds like a sensible aproach ... except that the * thing
will probably not be portable ...
if you create a patch it must be for 1.3.x and the feature should
only be active if units-exponent is set.
cheers
tobi
> Tobias Oetiker wrote:
> > Hi Karl,
> >
> > if you cann make a suggetion as to where you would expect to find
> > this information I will be glad to add it.
>
> Hi Tobi,
>
> I would expect a hint to be near the explanation of --logarithmic
> and especially near --units-exponent
> (e.g. "doesn't work in combination with --logarithmic")
>
> similar to some or the rpn-explanations ( ... doesn't work with VDEF )
>
>
> However, what I really would like is to make it work :-)
>
> I mean, it's no more than a printf "%f" vs printf "%e", isn't it?
>
> Attached is a little example numprint() that would format the numbers
> without exponent as long as they fit into units-length and use exponential
> display beyond that ... wouldn't that be a way to do it?
>
>
> Cheers
>
> - Karl
>
>
> > Today Karl Fischer wrote:
> >
> >> Tobias Oetiker wrote:
> >>> Yesterday Karl Fischer wrote:
> >>>
> >>>> But rrdgraph seems to ignore the --units-exponent=0 directive completely.
> >>>>
> >>>> using Version 1.2.23
> >>>>
> >>>> What am I doing wrong?
> >>> nothing ... log graphs are labled with exponential y axis ticks ...
> >>>
> >>> cheers
> >>> tobi
> >> thanks tobi.
> >> ... might be worth a word in the documentation though ...
> >>
> >> - Karl
>
>
> test.c
>
> #define _GNU_SOURCE
> #include <stdio.h>
> #include <math.h>
>
> int units_length = 8;
>
> void numprint(double num) {
> int dist;
> int length = units_length-1;
> int decimals;
>
> dist = floor(log10(fabs(num)));
> decimals = dist > 0 ? 0 : abs(dist);
>
> if (dist > length ||
> dist <= (length * -1) ) {
> printf ("%.*le", length - 5, num);
> } else {
> printf ("%*.*lf", units_length , decimals, num);
> }
> }
>
> int main() {
> double number;
> for (number = pow10(units_length + 1); number > pow10(units_length * -1); number /= 10 ) {
> printf ("%.0le: ", number);
> numprint(number);
> printf ("\n");
> }
> }
>
>
>
>
> will output something like:
>
> 1e+09: 1.00e+09
> 1e+08: 1.00e+08
> 1e+07: 10000000
> 1e+06: 1000000
> 1e+05: 100000
> 1e+04: 10000
> 1e+03: 1000
> 1e+02: 100
> 1e+01: 10
> 1e+00: 1
> 1e-01: 0.1
> 1e-02: 0.01
> 1e-03: 0.001
> 1e-04: 0.0001
> 1e-05: 0.00001
> 1e-06: 0.000001
> 1e-07: 1.00e-07
> 1e-08: 1.00e-08
>
>
--
Tobi Oetiker, OETIKER+PARTNER AG, Aarweg 15 CH-4600 Olten, Switzerland
http://it.oetiker.ch tobi at oetiker.ch ++41 62 775 9902 / sb: -9900
More information about the rrd-users
mailing list