Reverse Polish Notation

iCALCULA is based on Reverse Polish Notation (RPN) and the use of a four registers stack. Automatic storage of intermediate results is the reason that a RPN calculator easily processes complex calculations without the need of using parenthesis. The key to automatic storage is the RPN memory stack.

RPN works with unary (, sin(), ... )and binary operators (+, ÷, ...). Algebraic notation places operators between operands. An addition of two numbers can be expressed:

2 + 3 = 5

Then, in an algebraic calculator you type: 

|2|   |+|   |3|   |=|

RPN notation places operators after the numbers or variables they operate:

2 3 +

So, in a RPN calculator like iCALCULA you type:

|2|   |ENTER|   |3|   |+|

One of the most visible difference between both notations is that RPN doesn't use parenthesis or |=| key at all. This can be an advantage in more complex calculations:

ALG: |(|   |2|   |+|   |3|   |)|   |/|   ||   |(|   |5|   |-|   |4|   |)|   |=|
RPN: |2|   |ENTER|   |3|   |+|   |5|   |ENTER|   |4|   |-|   ||   |÷|

The contents of the stack move up and down automatically as new numbers enter the x-register (lifting the stack) and as operators combine two numbers in the x and y-register to produce one new number in the x-register (dropping the stack).

Suppose the stack is filled with the numbers 2,5,6 and 4. See how the stacks drops and lifts its contents while calculating 6-4+8:

t 2 2 2 2
z 5 2 5 2
y 6 5 2 5
x 4 |-| 2 |8| 8 |+| 10
1 2 3

  1. The stack drops its content. The t-register replicates its content.
  2. The stack lifts its content. The t-register's content is lost.
  3. The stack drops

Most functions and operators prepare the stack to lift its content when the next number enters the x-register. But there are some exceptions, for example |ENTER|.


THE |ENTER| KEY

|ENTER| key separates two numbers keyed in one after the other. It lifts the stack and replicates x-register. It also prepares the stack so that x-register will be overwritten with next input. Suppose the stack is again filled with 2,5,6 and 4. Now enter and add two new numbers:

t 2 5 6 6 6
z 5 6 4 4 6
y 6 4 5 5 4
x 4 |5| 5 |ENTER| 5 |6| 6 |+| 11
1 2 3 4

  1. Lifts the stack
  2. Lifts the stack and replicates the x-register
  3. Does not lift the stack
  4. Drops the stack and replicates the t-register

The replicating feature of |ENTER| can be interesting if you want to enter a number and apply an operator to itself. 

|3| |ENTER| |×|

gives you the square of 3.

The replicating effect of |ENTER| together with the replicating effect of stack drop (from t into z-register) allows you to fill the stack with a numeric constant for calculations.

|3| |ENTER| |ENTER| |ENTER| |×| |×| |×| |×| ...

gives you successive powers of 3.


THE |LAST x| REGISTER


The |Last x| register is a companion to the stack: it holds the number that was in the x-register before the last operation was executed. This ability to retrieve the "last x" has two main uses: correcting errors and reusing a number in a calculation.

No hay comentarios:

Publicar un comentario