[rrd-users] logarithmic scale question

Karl Fischer rrd-users at ficos.de
Wed Jul 23 18:55:42 CEST 2008


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



More information about the rrd-users mailing list