=include name
-=head1 SYNOPSYS
+=head1 SYNOPSIS
I<E<lt>RPN expressionE<gt>> :=
I<E<lt>vnameE<gt>>|I<E<lt>operatorE<gt>>|I<E<lt>valueE<gt>>
B<LT, LE, GT, GE, EQ, NE>
-I<Note: NE is not yet implemented>
-
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).
B<UN, ISINF>
-I<Note: ISINF is not yet implemented>
-
Pop one element from the stack, compare this to I<unknown> respectively
to I<positive or negative infinity>. Returns 1 for true or 0 for false.
Add, subtract, multiply, divide, modulo
-B<SIN, COS, LOG, EXP>
+B<SIN, COS, LOG, EXP, SQRT>
+
+Sine, cosine (input in radians), log, exp (natural logarithm), square root
+
+B<ATAN>
-Sine, cosine (input in radians), log, exp (natural logarithm)
+Arctangent. Output in radians.
B<FLOOR, CEIL>
Z<>
+=item Set Operations
+
+B<SORT, REV>
+
+Pop one element from the stack. This is the I<count> of items to be sorted
+(or reversed). The top I<count> of the remaining elements are then sorted
+(or reversed) in place on the stack.
+
+Example: C<CDEF:x=v1,v2,v3,v4,v5,v6,6,SORT,POP,5,REV,POP,+,+,+,4,/> will
+compute the average of the values v1..v6 after removing the smallest and
+largest.
+
+B<TREND>
+
+Create a "sliding window" average of another data series.
+
+Usage:
+CDEF:smoothed=x,1800,TREND
+
+This will create a half-hour (1800 second) sliding window average of x. The
+average is essentially computed as shown here:
+
+ +---!---!---!---!---!---!---!---!--->
+ now
+ delay t0
+ <--------------->
+ delay t1
+ <--------------->
+ delay t2
+ <--------------->
+
+
+ Value at sample (t0) will be the average between (t0-delay) and (t0)
+ Value at sample (t1) will be the average between (t1-delay) and (t1)
+ Value at sample (t2) will be the average between (t2-delay) and (t2)
+
=item Special values
B<UNKN>
step. This allows you to do calculations across the data. This
function cannot be used in B<VDEF> instructions.
+B<PREV(vname)>
+
+Pushes an I<unknown> value if this is the first value of a data
+set or otherwise the result of vname variable at the previous time
+step. This allows you to do calculations across the data. This
+function cannot be used in B<VDEF> instructions.
+
+B<COUNT>
+
+Pushes the number 1 if this is the first value of the data set, the
+number 2 if it is the second, and so on. This special value, allows
+you to make calculations based on the position of the value within
+the data set. This function cannot be used in B<VDEF> instructions.
+
Z<>
=item Time
=item MAXIMUM, MINIMUM, AVERAGE
-Return the corresponding value
+Return the corresponding value, MAXIMUM and MINIMUM also return
+the first occurrence of that value in the time component.
+
+Example: C<VDEF:avg=mydata,AVERAGE>
Z<>
=item LAST, FIRST
-Return the last,first value including its time
+Return the last,first value including its time. The time for
+FIRST is actually the start of the corresponding interval, where
+the LAST time component returns the end of the corresponding interval.
+
+Example: C<VDEF:first=mydata,FIRST>
+
+Z<>
+
+=item TOTAL
+
+Returns the rate from each defined time slot multiplied with the
+step size. This can for instance return total bytes transfered
+when you have logged bytes per second. The time component returns
+the amount of seconds
+
+Example: C<VDEF:total=mydata,TOTAL>
Z<>
-=item PERCENTILE
+=item PERCENT
Should follow a B<DEF> or B<CDEF> I<vname>. This I<vname> is popped,
another number is popped which is a certain percentage (0..100). The
I<percentage> percent of the values is lower or equal than the result.
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...
+of them in your data. B<Inf>inite numbers are lesser, or more, than the
+finite numbers and are always more than the I<Unknown> numbers.
-Example: C<VDEF:perc95=95,mydata,PERCENTILE>
+Example: C<VDEF:perc95=mydata,95,PERCENT>
=back