RootM™ 1.0

actual screen shot (Sony Clie)
one of six choices

actual screen shot (B&W device)
one of two choices


What is RootM?

[Back to Top]

RootM is an RPN scientific calculator for the Palm OS that natively support computations containing imaginary numbers. This means that sqrt(-1) or asin(2) are valid computations, producing complex results. Complex numbers can be entered in real/imag format or mag/phase format in a straightforward way. Quickly switch between real/imag and phasor (mag/phase) displays. RootM has a 16 high stack and 20 memory registers -- all of which can store complex results.

RootM is a advanced scientific and financial calculator too. RootM has functions to compute loan and mortgage terms and well as simple statistics. The keyboard is packed with functions and more are available via the pop-up menu. In total, RootM has 85 scientific, financial, statistical, and number base functions.

Technical specifications

System Requirements

[Back to Top]

RootM requires Palm OS 3.0 or higher and 115K of RAM (160K including MathLib).

RootM works on any handheld device that is running PalmOS 3.0 or higher including the Palm III, Palm V, Palm VII, m100, m105, m500, and m505, etc. from Palm, Inc, the Handspring Visors, the Sony CLIE, the HandEra, and the IBM Workpad.


[Back to Top]

To install RootM simply unzip the archive you downloaded and use the install tool (or equivalent) to install both RootM.prc and MathLib.prc on your Palm device. You might also consider assigning the calculator button to bring up RootM instead of the default calculator after syncing.

RootM requires MathLib.prc to be installed on the Palm Pilot. If you already have MathLib installed on your Palm Pilot from some other program you don't need to install it again.

MathLib is not part of RootM. MathLib is a free shared library that can be used by any PalmOS program that needs IEEE 754 double precision math functions. It is distributed under the terms of the GNU Library General Public License, and is freely available with full source code and documentation at the MathLib Information web page. It is not part of RootM, and you're not paying anything for its use; a copy is simply included in this archive for your convenience.

To uninstall RootM, simply delete RootM from the Palm applications screen. You may also want to delete MathLib as well if you don't have any other programs that require it.


[Back to Top]

RootM features a free 15 day trial. All the features of RootM are available during the trial. The only difference between the trial and a registered version is that the registration screen no longer displays on startup. After the 15 day trial, the five key (5) becomes disabled. If you decide that you like RootM, purchase a registration code to unlock it.

A registration code can be obtained by purchasing RootM from Creative Creek or Palm Gear H.Q. (Phone: 800-741-9070, Fax: 817-640-6614). You must provide the user name shown in the registration screen to obtain a valid code. The code will be emailed to you a few days after registration.

To register your software, select the Display->Registration menu item to bring up the registration screen.

Use graffiti (or the popup keyboard) to enter the registration code you received in the mail into the field following "Reg. code:" and tap OK. If the code you typed in is accepted, the screen will disappear and the RootM keyboard will be displayed. If you make a mistake in entering in the code, a dialog will indicate that the code wasn't valid and you will be given a chance to edit the code. If you wish to dismiss this dialog without entering a registration code, simply remove all the characters from the Reg. code field and tap OK.

If for any reason you have trouble registering your software please contact for assistance.

Reverse Polish Notation

[Back to Top]

RootM is a reverse polish notation (RPN) calculator. Numbers are entered onto the stack. Functions take their inputs from the stack and push their results onto the stack. The notation takes some getting used to but it is worth learning. Among its many benefits is an increased confidence in the results since all the intermediate calculations are displayed immediately. How many times you have you had to double- and triple-check a calculation when using an algebraic calculator?

As a simple example, the formula 14 * sin(60) is solved using RootM like this

button     display
[1]         1
[4]         14
[ENTER]     14.
[6]         6
[0]         60
[f] [SIN]   0.866025404
[*]         12.124355653

The [ENTER] key is used to separate the numbers during input. Alternatively, you can avoid using the [ENTER] key by evaluating the expression "from the inside out"

30 [f] [SIN] 10 [*]

This approach of evaluating from the inside out can be used to evaluate complicated expressions with the same level of confidence in the answer. For example, the equation

x = (-b + sqrt(b2 - 4*a*c))/(2*a)

is used to compute the roots of the quadratic equation (a*x2 + b*x + c=0). Suppose a=2, b=0.5, and c=1.2, then the steps to solve this using RootM are (working from the inside out).

0.5 [f] [X^2] 4 [ENTER] 2 [*] 1.2 [*] [-] [SQRT] 
0.5 [-] 2 [ENTER] 2 [*] [/]
ans: -0.125 +i 0.764444243

(where [SQRT] is the square root key, [/] is the divide key and [*] is the multiply key). The result is complex since the input to [SQRT] is negative. Check the result by plugging the solution into the original equation:

[STO] 0 [f] [X^2] 2 [*] 0.5 [RCL] 0 [*] [+] 1.2 [+]

As expected, the equation evaluates to zero.

Entering Complex Numbers

[Back to Top]

To enter complex numbers in real/imag notation, use the [+i] key between the real and imaginary parts. For instance, to enter the complex number 2 + i 5 into RootM tap

[2] [+i] [5]

To enter a complex number with a negative real or imaginary part (e.g. -2 -i 5) use the CHS key

[2] CHS [+i] [5] CHS

To enter complex numbers in magnitude/phase notation, use the [/_] (g ENTER) key between the magnitude and phase parts. For instance, to enter the complex number (phasor) 15 @ 30 degrees tap

[1] [5] [g] [/_] [3] [0]

When you first start RootM, complex numbers are displayed in real/imag format. To display them in mag/phase format tap R->P key. Tap P->R to return to the real/imag format. You can also change the complex number display format in the references screen (choose RECT or POLAR). If you prefer to use +j for the imaginary unit, there is a preference to change it.

Accessing Functions

[Back to Top]

Most buttons on RootM can access three functions. The function or number in the middle of each button is accessed without shifts. The function just above the button is accessed by pressing the f-shift key [f] before pressing the button. The f-shift indicator will light in the display when the f-shift is active. Similarly to access the functions on the front of the buttons use the g-shift key [g]. The g-shift indicator will light in the display when the g-shift is active.

Most functions remember the last x register value used during a computation. This value can be accessed via the [lastx] function. RootM has a 16 element stack. The first four elements of this stack are referred to by the names x,y,z, and t.

The value of the x register is what is displayed. When the "Show more stack values" preference is checked, the y register will also be displayed.

Complex vs. Real functions

[Back to Top]

Complex functions

Many, but not all, of the functions built into RootM support complex number inputs. Here are the functions that do:

Arithmetic functions
[+] [-] [*] [/]

These functions operate on the values in the x and y stack registers, and produce complex results.

Scientific functions
[SIN] [COS] [TAN] [SIN-1] [COS-1] [TAN-1]
[LN] [LOG] [EXP]
[10x] [X2] [SQRT] [Yx] [1/x]

These functions operate on the x register and replace it with the complex result.

By default, these functions treat any inputs outside the normal real domain as if they are in radians even when the angle preference is degrees or grads. For example

30 [SIN] 

produces 0.500 when in degrees since the input is within the real domain of [SIN] while

30 [+i] 0.00001 [SIN]

produces -0.988 +i 1.543e-6 (which is the radian result) since the input is outside the real domain of [SIN].

If you would rather have the scientific functions error for inputs outside the real domain when the angle preference is not radians, check the "Require radians for complex funs" on the "More preferences" screen. In this case, the second example would have produced an error. You would have to switch the calculator to radians to get the above result.

Complex conversion functions

[C->R] Complex to real conversion. Breaks the value in the x register into real and imaginary parts.

[R->C] Real to complex conversion. Uses the real parts of the values in the x and y registers to construct a complex number.

[CONJ] Complex conjugate. Replaces the value in the x register with its complex conjugate.

[ABS] Absolute value or magnitude. Replaces the complex value in the x register with its magnitude. For real inputs, this amounts to stripping off the sign.

[ARG] Complex argument or phase angle. Replaces the complex value in the x register with its phase angle expressed in the current angle units (degrees, radians, or grads).

[R->P] When either x or y has a nonzero imaginary part, R->P changes the complex display mode to POLAR so that complex numbers on the stack are viewed in magnitude/phase format. The values on the stack are unchanged. When both x and y are real, R->P converts them from rectangular coordinates to polar coordinates.

{P->R] When either x or y has a nonzero imaginary part, P->R changes the complex display mode to RECT so that complex numbers on the stack are viewed in real/imag format. The values on the stack are unchanged. When both x and y are real, R->P converts them from polar coordinates to rectangular coordinates.

[+i] or [+j] start imaginary part

[/_] start angle part

Real functions

The remaining functions built-in to RootM only support real inputs -- they produce an error when presented with a complex value (i.e. a value with a non-zero imaginary part). Use [ARG], [ABS], or [C->R] to convert complex numbers into real numbers suitable for the real-valued functions. These functions are

Financial functions

[N] [i] [PV] [PMT] [FV] [CLFIN]

Statistical functions

[S+] [S-] [MEAN] [STD] [N!] [%] [%CH]

Number base functions

[HEX] [OCT] [BIN] [AND] [OR]

Time functions

[->H.MS] [->HRS]

Other functions



[Back to Top]

RootM Walkthrough

(A guide to the RootM interface)

The display

[Back to Top]

The display can show numbers in several formats depending on the preferences you have chosen. Numbers can be displayed in

Tap the display to bring up the quick stack list. This selecting an item in the list, will push it into the x register.


[Back to Top]

(main screen)

(main screen)


[Back to Top]

The preference screen is displayed when you choose Display->Preferences from the menu or when you tap the angle indicator on the screen (see walkthrough above).

Press OK to commit your changes. Press Cancel to leave them as they were. The More button brings up an additional preference screen.

Pressing Close on this dialog will not affect your current preferences until you press OK on the previous dialog.

Basic Functions

[Back to Top]














[A] - [F]

Hexadecimal digits (only valid when number base is HEX)


Change sign of mantissa or exponent.



Complex conjugate (change sign of imaginary part)


Start entering exponent



Undo last character (or clear x register)











Separate values and prepare x register to be overwritten

[+i] or [+j]

Start entering imaginary part


Start entering phase part


Convert from real/imag to complex


Convert from complex to real/imag


Display complex values in POLAR notation

When both X and Y are real, [R->P] converts (x,y) into polar coordinates (R,theta). When either is complex, just changes the complex display preference.


Display complex values in RECT notation

When both X and Y are real, [P->R] converts (R,theta) into Cartesian coordinates (x,y). When either is complex, just changes the complex display preference.

RootM allows you to input numbers using Graffiti. The characters 0 through 9, decimal, minus sign, 'e' and the graffiti return character can be used instead of the numeric buttons, [.], [chs], [eex], and [enter]. In hexadecimal mode, you may use Graffiti to enter the letters A through F.

International Number Formats

[Back to Top]

RootM honors the number format chosen in the system Prefs application. If you find that RootM is displaying numbers using the wrong decimal or thousands separator, go to the system Prefs application and choose Formats from the popup menu. Choose the number format for your locale from the Numbers: popup.

For number formats that use the comma as the decimal separator, RootM displays [,] instead of [.] for the decimal button. Changing the number format affects the way values are displayed, copied, and interpreted during a paste.

Stack and Register Functions

[Back to Top]

RootM has a 16 high stack that persistently stores the results from previous computations or numbers that have been pushed onto it via [ENTER]. The stack can be cleared with the [CLSTK] function, the x register is cleared with the [CLX] function or [<--].

To quickly access a previous result or to just view the stack, tap on the display to bring up the stack view.

When you tap an element in this list, it will be pushed onto the stack and the list will disappear. To make the list disappear without changing the stack, tap OK.

RootM has 20 registers -- 10 primary registers and 10 secondary registers. Only the primary registers are accessible directly from the keyboard. The secondary registers are used to store values used for the financial and statistical functions. The secondary registers can be used to store your own values but you must be careful not to use any financial or statistical functions if you do so.

The 10 primary registers are accessed by pressing [STO] or [RCL] and then the register number [0] through [9]. To access the secondary registers, swap the primary and secondary registers with [p<>s] and then use [STO] or [RCL].

The registers and stack can be viewed by choosing Display->Registers from the menu or by tapping the [RCL] key twice.

Choose OK to return to RootM. Tap on Register or Stack to see the values. Tap Hex, Dec, Oct, or Bin to view integer values stored in the registers in the chosen number base. Select an element in the list to push it onto the stack.




Stack effect

[STO] n


Store into register n


[STO] [+] n


Add contents of x register to register n


[STO] [-] n


Subtract contents of x register from register n


[STO] [*] n


Multiply register n with contents of x register


[STO] [/] n


Divide register n by contents of x register


[RCL] n


Recall from register n



Display the register, stack, and variables screen




Swap primary and secondary banks of registers




Clear all registers




Exchange x and y registers



Recall last x value



Clear x register




Clear stack

scroll up button on Palm


Rotate stack contents up

scroll down button on Palm


Rotate stack contents down



Push current value onto stack.



Pop value off of stack



When entering a number undo the last character, otherwise clear the x register the same as clx.


Scientific Functions

[Back to Top]

The unary functions operate on the value in the x register and replace it with the function result (f(x))

while the binary functions use the values in both the x and y registers and place the result in the x register.








f shift. Use to access functions above each button.




g shift. Use to access the functions at bottom of each button.




Absolute value (complex magnitude)





Complex argument (phase angle)





Round value to display precision





Modulo (y - x * floor(y/x))





Value of pi





Natural logarithm (base e)




ln(1 + x) more accurate for x near zero





Base 10 logarithm





Exponential function





exp(x) - 1 more accurate for x near zero





Ten to the x power





y to the power of x










Square root










Fractional part





Integer part





largest integer smaller than or equal to x





smallest integer larger than or equal to x










Percent (y * x) / 100




% ch

Percent change 100 * (x - y) / y




The int and frac functions round to 9 decimal digits before determining the integer and fractional parts. Under this definition frac is computed using the formula

frac(x) = x - int(x)

Most of the time this produces the desired results but does treat the input as if it only had 10 digits of accuracy. One of the ramifications of this is that the fractional part doesn't always have the same sign as x. Take for example the number 1.99999999964 (i.e. 2 - 36e-11). When displayed in RootM this number looks like it is 2.0. Because of the rounding int(x) is 2 (as expected) while frac(x) is -36e-10.

The ceil, round, and floor functions do not do this rounding and may be more appropriate to use if you need to take advantage of all 16 digits of accuracy that RootM maintains.

Trigonometric Functions

[Back to Top]

The trigonometric functions are sensitive to the angle mode: degrees, radians, or grads (deg, rad, or grd in the display where 360 degrees = 2 pi radians = 400 grads).

Set the angle mode using the Preferences dialog (available from the Display menu) or via the angle function. Except for atan2, these functions operate on the value in the x register and replace it with the function result (f(x)).































Two argument arctangent: same as atan(y/x) but in the correct quadrant




Hyperbolic sine




Hyperbolic cosine




Hyperbolic tangent




Hyperbolic arcsine




Hyperbolic arccosine




Hyperbolic arctangent




Pushes the value of pi (3.14159...) onto the stack.




Radians to degrees conversion




Degrees to radians conversion


Time Functions

[Back to Top]

RootM has three time functions

Polar Coordinates

[Back to Top]

RootM provides two functions to convert back and forth between Cartesian (rectangular) coordinates and polar coordinates. The relationship between polar coordinates and Cartesian coordinates is defined by the following picture and formula

x = R cos(theta)
y = R sin(theta)
R = sqrt(x2 + y2)
theta = atan2(y,x)




Effect on stack



Convert from Cartesian coordinates to polar coordinates.

When x or y has a nonzero imaginary part, this function just changes the complex display preference to be POLAR.



Convert from polar coordinates to Cartesian coordinates

When x or y has a nonzero imaginary part, this function just changes the complex display preference to be RECT.



Absolute value (complex magnitude).



Complex argument (phase angle)

Number Base Functions

[Back to Top]

RootM can display and compute with numbers in hexadecimal (base 16), octal (base 8), and binary (base 2) format as well as the default decimal (base 10) format. Non-decimal values are displayed with a subscript following them indicating the number base. The number base functions honor the wordsize set in the preference screen.

hexadecimal display

octal display

binary display

The functions hex, oct, bin, and dec convert values between bases and set the number base for further calculations and input. Use any combination of the numeric buttons and Graffiti to input non-decimal numbers. You must use graffiti to input the hexadecimal characters A through F since no buttons exist on the calculator for them. They do exist as program steps however.






Convert x register to hexadecimal number base.



Convert x register to octal number base.



Convert x register to binary number base.



Convert x register to decimal number base.



Bitwise AND of x and y



Bitwise OR of x and y

Values outside the wordsize preference are wrapped (that is, the excess most significant bits are dropped) and are converted to an integer. The display will automatically switch to a smaller font when large numbers are viewed in oct or bin format. Large binary numbers may wrap on the display as well.

Modular Functions

[Back to Top]

A few functions behave differently when a non-decimal number base is chosen:






Two's complement. Replace x register with its two's complement (all bits inverted and 1 added)



Modular addition. Same as regular addition except that results that exceed the wordsize are wrapped.



Modular subtraction. Same as regular subtraction except that negative results are returned as two's complement numbers.



Modular multiplication. Same as regular multiplication except that results that exceed the wordsize are wrapped.



Modular division. Same as regular division except that results that exceed the wordsize are wrapped and any fractional remainder is discarded.

The other functions on the calculator can be applied to non-decimal numbers. However, if the result is not an integer that is in range, an error is displayed and the number base reverts to decimal. The value in the x register will be the result of the computation. Simply reapply the conversion routine to wrap and truncate the value to be in range.

Financial Functions

[Back to Top]

The financial functions are governed by the equation,

PV*(1+i)N + PMT/i*((1+i)N-1) + FV = 0

This equation is used when the annuity mode (BEGIN/END preference) is set to ordinary annuity (payments due at the end of the period [end]). When the annuity mode is annuity due (payments due at the beginning of the period [begin]) then PMT in this equation is modified to be PMT * (1 + i).

The financial functions have two modes: input mode and calculation mode. RootM is in input mode if a number has been keyed into the calculator or any non-financial functions have been executed. Executing one of the main financial functions ([n], [i], [pmt], [pv], or [fv]) stores the displayed value in the associated financial register. RootM is in calculation mode after any financial functions have been executed and before any other functions that change the stack are executed. The result of a financial computation is pushed onto the stack:

Most of the time this should behave as you would expect. However, if for some reason RootM stores a value when you intended to compute one, simply execute the financial function again to obtain the desired result.







Number of periods

Input mode: Store displayed value as N.

Calculation mode: Compute N.



Interest rate per period

Input mode: Store displayed value as i (in percent).

Calculation mode: Solve for i. If the solver doesn't converge an error '-e-' will be displayed.



Payment per period

Input mode: Store displayed value as PMT.

Calculation mode: Compute PMT.



Present value

Input mode: Store displayed value as PV.

Calculation mode: Compute PV.



Future value (or balloon)

Input mode: Store displayed value as FV.

Calculation mode: Compute FV.



Clear financial registers and set payment period to the end (ordinary annuity).


Cash Flow Convention

Financial problems can be thought of as a series of cash flows. For example a mortgage consists of a large positive cash flow (the loan amount) followed by a series of monthly negative cash flows (the payments) with possibly a final negative cash flow at the end (the balloon payment). The diagram below illustrates this situation.

Positive cash flows (amounts you receive) are shown as upward pointing arrows. Negative cash flows (amounts you pay) are shown as downward pointing arrows. The horizontal axis of the diagram is time, with time increasing to the right. The time between the equally spaced payments is called the period.

For the problem to be solvable with RootM, there must be at least one cash flow in each direction. It is always possible to add a present value or future value cash flow to meet this requirement. Think about your problem to determine which is more appropriate (see example 4 below).


Example 1: Suppose you are interested in determining the payment for a car loan of $18,500 at 7.25% interest for 5 years. The key strokes to solve this problem using RootM are
  1. [clfin] to reset the financial registers (since the values in the registers are maintained between sessions with RootM it is a good idea to reset the financial registers before each use of the financial functions).
  2. [5] [enter] [1] [2] [*] [n] to set the number of periods (in months)
  3. [7] [.] [2] [5] [enter] [1] [2] [/] [i] since the interest per month is 7.25/12 %
  4. [1] [8] [5] [0] [0] [pv] to set the principal or present value of the loan
  5. [pmt] to compute the payment per period (ans: $-368.51). The value is negative because the payments are made in the opposite cash flow direction from the principle cash flow. [If it makes more sense to you for the payment to be positive, unselect the "Use cash flow convention" preference.]

Example 2: What is the payment if you are willing to pay a balloon payment of $2,000 at the end of the loan?

  1. [2] [0] [0] [0] [chs] [fv] Set the value $-2,000 as the FV (balloon) for the loan. The value is negative because this is money you will pay out.
  2. [pmt] to compute the new payment per period (ans: $-340.75)

Example 3: How much interest do you end up paying with the balloon payment?

  1. [n] [pmt] [*] [fv] [fv] [+] [pv] [pv] [+] to compute the total payments minus the loan value
    (ans: $-3,945.17). Note that [fv] and [pv] had to be pressed twice since the first time stored the total payments into FV or PV.

Example 4: To compute the effective interest rate in an IRA account that you put $2000 into each year, you will need to enter the current value of the account as a positive future value (FV) even though you haven't sold the assets in the account. To make the example concrete, suppose that you started your IRA in 1985 with a $10,000 rollover and that the value in the account is $80,000 in the year 2001.

  1. [clfin] to reset the financial registers
  2. [2] [0] [0] [1] [enter] [1] [9] [8] [5] [-] [n] to set the number of periods (in years)
  3. [1] [0] [0] [0] [0] [chs] [pv] to set the starting value of the account. The value is negative since you added this value to the account with the rollover.
  4. [2] [0] [0] [0] [chs] [pmt] to set the annual contribution.
  5. [8] [0] [0] [0] [0] [fv] to set the current value of the account. The value is positive since this is the money you would receive if you sold all the assets in the account.
  6. [i] to compute the effective annual rate of return in the account (ans: 6.39%)

Statistical Functions

[Back to Top]

The statistical functions accumulate sums based on the values in the x and y stack registers. These sums are used to compute the mean [mean] and standard deviation [std] or can be accessed directly via [swapreg] and [RCL]. Use [clrstats] to reset all the statistical registers to zero before accumulating sums. If you make a mistake keying in the x,y values and after pressing [S+], re-key the errant values and press [S-] to remove them from the sums. The mean and standard deviation are computed as

with similar equations holding for the y component as well.




Effect on stack



Accumulate x,y

n is the number of sums accumulated so far.



Remove x,y

n is the number of sums accumulated so far.






Standard deviation



Clear statistical registers








Random number from 0 to 1.0 (uniformly distributed)






% ch

Percent change

Legal Stuff

[Back to Top]

Although care has been taken to insure a bug-free program, Creative Creek makes no warranty whatsoever, either implied or expressed, as to the correct functioning of this software. When using this software, the user assumes all responsibility for any damages caused, directly or indirectly, by its use.

RootM is copyrighted. Copyright laws apply and the software shall be classified as proprietary material. The unregistered version may be given to your friends. If you want to include RootM on your web site or to distribute it in any way, please contact us at

When you purchase RootM you are granted a non-exclusive, nontransferable license to use the software and documentation for use in accordance with this License. This License allows use of the software by a single user unless otherwise specified by the description provided at time of purchase.

RootM and Creative Creek are trademarks of Creative Creek. Palm, PalmOS, and HotSync are trademarks of Palm, Inc. or its subsidiaries. All other trademarks are by their respective owners.

Contacting Creative Creek

[Back to Top]

See the Creative Creek web site ( for up-to-date information about RootM. If you have questions, suggestions, bug reports, or you just want to tell us how you much you like RootM you can contact us at or on the web at


Copyright © 2001 by Creative Creek and Clay M. Thompson -- All rights reserved.

Last updated: 1-Oct-2001