Calc-50 -- High Precision Scientific Calculator for iPhone, iPad

David M. Smith
Professor of Mathematics (Emeritus)
Loyola Marymount University
Los Angeles, CA

This graphing calculator carries over 50 significant digits of precision, and has a large
number of available functions.

This page gives a brief overview of the functions in Calc-50.
For some more advanced examples of Calc-50 programming and graphics, see the
Calc-50 examples page.

News -- September 2020:     Have some labels on the calculator keys become invisible?

That is caused by Apple's recent changes to iOS if your phone or iPad is in Dark Mode.
One fix is to go to to Settings / Display & Brightness and make sure Light Mode is on.
Calc-50 versions starting with 1.5 are ok in Dark mode.

The latest version on Apple's app store is version 1.6, October 2021.
Some minor improvements have been made to the plotting functions.

Version 1.5 was released in November 2020.
The main change from version 1.4 is to make the key labels stay visible when
the device is in Dark Mode.

New features for version 1.4 of June 2020:
Recent versions of the iPhone and iPad operating system cause apps to
start up more slowly, so a launch screen saying "Loading Calc-50"
might be visible briefly before the calculator screen appears.

New features for version 1.3 of March 2019:
There is a new key for extrapolation of sequences, series, and products. The
sum key can now automatically estimate infinite series, and the limit key
can handle more difficult limits.

New features for version 1.2 of July 2018:
User function definitions can now be longer, and programs that combine complex
arithmetic with real functions like sum and integrate are now easier to write.

Calc-50 uses "RPN" input format, like classic scientific calculators such as the HP-15C.
This means the arguments are entered first, followed by the function.

For example, 2 + 3 is computed by pressing these keys: 2, enter, 3, +

These input values are kept in a 4-number stack. They are named x, y, z, t, where x is the
value displayed at the top of the screen. After 2, enter, 3 in the example above, y = 2 and
x = 3. Then the + operation adds x + y leaving 5 in x.

There are 101 storage registers, numbered 0 to 100, where values can be saved.
6, sto stores x in register 6, and 42, rcl recalls the value in register 42 and puts it into x.
Some fancier applications can use "index registers", as in 1, rcl, sto. This stores the
current x into whichever register is given by the value in register 1.

The fix key sets the number of digits after the decimal in the display. If x is 123.4567,
then 2, fix will display it as 123.46. The value of x is not changed, only the display
is different.

A negative number of digits signifies that large values are to be shown with commas.
-3, fix will show 12345.6789 as 12,345.679 in the display.

The sci key sets the number of significant digits to display in scientific notation.
If x is 123.4567, then 5, sci will display it as 1.2346e+2.

The display can show up to 50 digits. In fix mode, if x is too large or too small for the
display, it will be shown in scientific mode.

Pressing the help key followed by another key brings up a screen like this one.

Each key on the calculator has an associated help screen with example usage, domain, and
sometimes a graph. Some general notes about Calc-50 can be found on the help screens for
digits 0, 1, 2, ....

The exit key then returns to the normal calculator screen.

The func key brings up one of 9 different sets of functions. The 20 keys in the lower left
change with each screen.

Pressing func by itself scrolls to the next screen, or pressing a digit from 1 to 9 followed
by func goes directly to that screen.

Screen 1 has the basic math functions: trig, exponentials, logs and powers.

Screen 2 has rounding to integers, max/min, random numbers, some statistical functions,
mod, power mod, gcd, and rational approximation:

Screen 3 has factorial, gamma function, log gamma, combinations, permutations, the Euler
gamma constant, Bernoulli numbers, beta, psi, polygamma, pochhammer, error function,
incomplete gamma, incomplete beta. Also conversion between rectangular and polar form,
and absolute value.

Screen 4 has the exponential integral, sin, cos, sinh, cosh, and log integrals, Fresnel C and
S functions, Bessel J and Y functions.
Also time and calendar conversions, day of the week, percents, hypotenuse, and last x.

Screen 5 has some financial functions that solve for various variables from a home
or auto loan.

After entering any 4 of the 5 values n (number of payments), i (interest rate),
pv (present value), pmt (payment), fv (future value) using the store keys, pressing the
remaining key computes that value.

Screen 6 has the keys used to define and edit user functions, and also 7 keys that use those
functions: derivative, nth derivative, maximum f(x), minimum f(x), integral of f(x) from
a to b, arc length of f(x) from a to b, solve f(x) = 0.

Depending on f(x), these functions can be slow. When a slow function is running, a
small spinning wheel is displayed above the help key and "running ..." appears in the
calculator output area to show that the function is still working.

The time key can be used to limit the running time for these functions.

Factoring integers with the fctr key is usually fast for integers up to about 30 or 40 digits.
Inputs up to 50 digits are allowed, and most of these can be factored, but some are slow.

The prog key allows for up to 10 user functions to be defined. Press a digit 0-9 followed
by prog to enter program mode and define a new function or edit an existing one.
For example, define function 6 to be cos( ci(x) ).

6, prog, clr f, 4, func, ci, 1, func, cos, 6, func, end

In program mode, before the end key is pressed, here is how the function definition looks:

The underscore _ after cos is the cursor. The 4 arrow keys move the cursor so a function
can be edited. The copy and paste keys let a function be copied and then pasted into another
function. The clrf key clears the function being edited, and bksp is a backspace that deletes
the operation immediately to the left of the cursor.

Pressing the end key puts the calculator back in normal mode. To evaluate function 6 at
x = 1.2 and compute cos( ci(1.2) ):

1.2, enter, 6, fn

With the calculator in radian mode, this function has a root near x = 0.117. To use the solve
key to find it, starting with 0.1 as an initial guess,

0.1, enter, 6, solv

The result is 0.117116.... Checking this by computing the function at this value (6, fn)
gives about -2.5e-57, indicating the root should be accurate to over 50 digits.

For another example, integrate this function from 1 to 3. To use the integrate key,

1, enter, 3, enter, 6, integrate

This numerical integration takes less than a second. The result is 1.86081....
Pressing x<->y to exchange the x and y registers shows y was about 1.0e-56, meaning
the integration algorithm stopped with the last two iterations agreeing to about 56 digits.

Screen 7 has more keys that involve user functions: graphics, limits, sums, extrapolation,
differential equations, and function selection.

The sum key can be used to do more than just simple sums. It can provide general loop
control for making lists and iterating recurrence relations.
For examples of this kind of programming, including some graphics applications, see the
Calc-50 examples page

Four kinds of graphs are available: y = f(x) plots, parametric ( x(t), y(t) ) graphs,
polar r = f(theta) graphs, and list plots. Up to five graphs can be displayed at once
by using the add plot, ..., keys to add another graph to previously defined graphs.
Other keys can override the default settings for max and min y-values for the display
window, spacing for x and y axis tick marks, graph aspect ratio, horizontal and vertical
grid lines.

Use the plot key to graph f(x) = sin(3x) + cos(2x) from 0 to pi

7, prog, 1, sto, 3, *, 1, func, sin, 1, rcl, 2, *, cos, +, 6, func, end

7, func, 0, pi, 7, plot

Touching the screen in the graph area puts a small symbol on the screen at that location
and displays the (x,y) coordinates of that position at the bottom of the screen. Two buttons
appear next to the exit button, "zoom in" and "zoom out".

Zooming in re-draws the graph centered at the x-value shown at the bottom, with an
x-interval half as big as before. Zooming out does the same, with an x-interval twice
as big as before.

Screen 8 has unit conversion functions. Pressing a conversion key changes the value in the
x register from the units at the top of the key to the units at the bottom. Pressing the
inv key followed by a conversion key converts the other direction. The units of the result
are displayed along with its numerical value.

Screen 9 puts the calculator into complex arithmetic mode. The complex elementary
functions and basic arithmetic operations are provided.

To enter 1 + 2i, press

1, +i, 2, enter

Fewer digits can be displayed in complex mode for the real and imaginary parts of the
number, but each part still has over 50-digit accuracy internally.

The complex sto and rcl keys use 2 storage registers to hold one complex number.
5, sto while in complex mode will store the real part of x in register 5 and the imaginary
part in register 6. This can be used to communicate values between real and complex
modes, since registers 5 and 6 can be accessed separately from any real mode screen.

Why would anyone need 50-digit accuracy?

Most of the time, we don't. Most calculators have 14 to 16 digit accuracy, and exponent
ranges up to about 1.0e+1000. But some calculations need more accuracy or greater range.

Some of the most common applications for high-precision calculations involve deriving
formulas to be used in ordinary computer applications. If we want the coefficients in a
formula to be correctly rounded in the machine's double precision, then they usually must
be computed using higher precision.

An example of this is the derivation of the Guass quadrature rule on the Calc-50 examples
page. If we used only double precision to do the derivation, the coefficients needed in the
formula would not be accurate to full precision.

Another feature of that derivation is that it uses binomial coefficients, derivatives, sums,
graphing, and equation solving in order to get the final formula. Most calculators do not
provide those operations.

Sometimes it can be hard to see that a formula is unstable and needs more accuracy, so it
is nice to have what seems like excessive precision available.

Here is a simple example. Examine the behavior of this function as x approaches zero.

f(x) = ( tan(sin(x)) - sin(tan(x)) ) / x^7

Doing f(0.03) on a standard calculator (TI-89) gives 0.033379, which is correct to only
3 significant digits.The older HP-15C calculator does even worse. It gives 0.0, no correct
digits at all.

The same calculation using Calc-50 gives .033367877648658374713095209129 when
displaying 30 digits. The formula is still losing accuracy, but by carrying 50 digits we can
afford to lose 11 digits in this unstable formula and still have plenty of accuracy left.

Getting closer to zero makes things even worse. The TI-89 gives f(0.001) = -100000.0
while Calc-50 shows .033333371693146997367349091810, still accurate to 30 places.

In 2020, the built-in calculator app for the iPhone does not have many mathematical
functions, but it does use its compiler's quadruple precision to provide about 34 digits.
It can get f(0.001) correct to 13 digits, but f(0.00001) has only 1 significant digit.

Calc-50 is starting to notice the instability for f(0.00001), getting "only" 27 digits correct.
For extreme cases like this, Calc-50 has one other trick for overcoming instability. The nth
derivative key on screen 6 works with derivative formulas that are also unstable, so it raises
precision above the user's 50-digit level to return accurate derivatives.

Defining f(x) as a user function on screen 6, the nth derivative key allows n = 0, meaning
it will evaluate our unstable function at higher precision. That gives f(0.00001) correct
to 50 digits.

Here is a second example. This time it is the exponent range that causes problems. Find
the probability of getting exactly one million heads if we toss a fair coin two million times.
This formula is

comb( 2e6 , 1e6 ) * (0.5)^2e6

where comb is the combination function, also called a binomial coefficient, and the second
term is 1/2 to the power two million.

The answer is about 0.000564, and this formula is not unstable. The problems for standard
calculators are that not all of them have a combination function, and the two numbers

comb( 2e6 , 1e6 ) = 5.5304e+602056 and (0.5)^2e6 = 1.0202e-602060

are far outside the exponent range of a normal calculator.

Summing up, some of the advantages Calc-50 over other calculators are:

  • Many more functions available

  • High precision means the user doesn't have to be as worried about moderately unstable
    formulas losing too much precision

  • Greater exponent range means fewer calculations fail because intermediate results
    became too large or small

To see how Calc-50 gets the results for many of its functions, see my web page on general
high-precision computation: Multiple Precision Computation

The papers there give the algorithms used for many of the functions, and there is Fortran
code on the "More sample programs" page giving insight into how some of the more complicated
functions like integration, derivatives, root-finding, etc., work in Calc-50.