rpn compare operators CAN return unknown ... (#293)
[rrdtool.git] / doc / rrdgraph_rpn.pod
index 21661ba..5558c22 100644 (file)
@@ -9,7 +9,8 @@ I<RPN expression>:=I<vname>|I<operator>|I<value>[,I<RPN expression>]
 =head1 DESCRIPTION
 
 If you have ever used a traditional HP calculator you already know
-B<RPN>. The idea behind B<RPN> is that you have a stack and push
+B<RPN> (Reverse Polish Notation).
+The idea behind B<RPN> is that you have a stack and push
 your data onto this stack. Whenever you execute an operation, it
 takes as many elements from the stack as needed. Pushing is done
 implicitly, so whenever you specify a number or a variable, it gets
@@ -50,7 +51,8 @@ B<LT, LE, GT, GE, EQ, NE>
 
 Pop two elements from the stack, compare them for the selected condition
 and return 1 for true or 0 for false. Comparing an I<unknown> or an
-I<infinite> value will always result in 0 (false).
+I<infinite> value will result in I<unknown> returned ... which will also be
+treated as false by the B<IF> call.
 
 B<UN, ISINF>
 
@@ -252,7 +254,7 @@ rrdtool graph image.png --imgformat=PNG \
  TICK:exceeds#aa000080:1
 
 Note: Experience has shown that a factor between 3 and 5 to scale sigma is a good 
-discriminator to detect abnormal behaviour. This obviously depends also on the type 
+discriminator to detect abnormal behavior. This obviously depends also on the type 
 of data and how "noisy" the data series is.
 
 This prediction can only be used for short term extrapolations - say a few days into the future-
@@ -351,18 +353,19 @@ Example: C<VDEF:first=mydata,FIRST>
 =item TOTAL
 
 Returns the rate from each defined time slot multiplied with the
-step size.  This can, for instance, return total bytes transfered
+step size.  This can, for instance, return total bytes transferred
 when you have logged bytes per second. The time component returns
 the number of seconds.
 
 Example: C<VDEF:total=mydata,TOTAL>
 
-=item PERCENT
+=item PERCENT, PERCENTNAN
 
 This should follow a B<DEF> or B<CDEF> I<vname>. The I<vname> is popped,
 another number is popped which is a certain percentage (0..100). The
 data set is then sorted and the value returned is chosen such that
 I<percentage> percent of the values is lower or equal than the result.
+For PERCENTNAN I<Unknown> values are ignored, but for PERCENT
 I<Unknown> values are considered lower than any finite number for this
 purpose so if this operator returns an I<unknown> you have quite a lot
 of them in your data.  B<Inf>inite numbers are lesser, or more, than the
@@ -370,6 +373,7 @@ finite numbers and are always more than the I<Unknown> numbers.
 (NaN E<lt> -INF E<lt> finite values E<lt> INF)
 
 Example: C<VDEF:perc95=mydata,95,PERCENT>
+         C<VDEF:percnan95=mydata,95,PERCENTNAN>
 
 =item LSLSLOPE, LSLINT, LSLCORREL
 
@@ -398,4 +402,5 @@ Make sure to read L<rrdgraph_examples> for tipsE<amp>tricks.
 
 Program by Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
 
-This manual page by Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt>
+This manual page by Alex van den Bogaerdt E<lt>alex@vandenbogaerdt.nlE<gt>
+with corrections and/or additions by several people