Ackermann's Function Letter to GŁnter Dotzel




November 2, 1991

19628 Via Monte Drive
Saratoga, CA 95070

GŁnter Dotzel, ModulaWare GmbH
Wilhelmstr. 17A, W-8520
Erlangen, GERMANY

Enclosure: MSDOS disk (VPCalc v2.00).

Dear Guenter:

I thoroughly enjoyed your article "A function to end all functions"
in Algorithm 2.4, October 1991.  But Guenter, you too can compute
A(4,2), on your IBM compatible PC.  I am sending you a copy of my
program VPCalc.  Load the program and type:

     SetMax(20,000)
     20,000 M
     Ax4y2 = 2^(2^(2^(2^2))) - 3
     WriteN("Ax4y2")

and A(4,2) will be computed and written to the file Ax4y2.VPN.

The commands are not case sensitive and the commas (,) are not
needed in numbers.  The "Ax4y2 =" is better than "AX4Y2 =" since it
is stored inside the output file.

It takes about 29 seconds for VPCalc to compute A(4,2) on a 33 MHz
486 DX machine.  I have stored the value of A(4,2) that I computed
in a separate directory on the disk.  This directory also contains
this letter and a program, Ackerman.Pas, I wrote to compute A(x,y).

If you inspect the output file Ax4y2.VPC, it looks like:

     Ax4y2 = m.n E+19728, m.n =

     2.
     00352 99304 06846 46497 90723 51560 25575 04478 25475 56975
     14192 65016 97371 08940 59556 31145 30895 06130 88093 33481
     01038 23434 29072 63181 82294 93821 18812 66886 95063 64761
     54702 91650 41871 91635 15879 66347 21944 29309 27982 08430
     91048 55990 57015 93189 59639 52486 33723 67203 00291 69695

     92156 10876 49488 89254 09080 59114 57037 67520 85002 06671
          ...
     91612 41536 89751 48082 61904 84794 65717 36601 00589 24766
     55445 84083 83347 90544 14481 76842 55327 20731 55863 49347

                                Page 1
          ...
     15545 64509 00448 02789 05570 19683 28313 63071 89976 99153

     16667 92089 58768 57229 06009 15472 91963 63816 73596 67395
     99757 10326 01557 19202 37348 58052 11281 17458 61006 51525
     98883 84311 45118 94880 55212 91457 75699 14657 75300 41384
     71712 45779 65048 17585 63950 72895 33753 97558 22087 77750
     60723 39445 58789 59057 19156 733

                           Page 8

     E+19728 (19729)

          ...
                           Page 9

From this you can see that A(4,2) has 19,729 decimal digits, not
19,728 as you stated in your article, a minor flaw.

Using my program Ackerman.PAS, it was easy to determine that:

     A(0,y) = y+1
     A(1,y) = y+2
     A(2,y) = 2y + 3
     A(3,y) = 2^(y+3) - 3

The formula for A(3,y) published in your article was "2 rased to
the power of 2y+3", a typographical error.

From your article I deduced:

     A(4,y) = 2^(2^(2^...2)) - 3, where there are y+3 2's

My program Ackerman.PAS also computes the total number of times
that the A(x,y) function is called for an initial x,y.  It would
appear that the number of times called, AC(x,y), grows even faster
than the Ackermann function itself.  For example:

     A(3,6) = 509        AC(3,6) = 172,233
     A(3,7) = 1021       AC(3,7) = 693,964
     A(3,8) = 2045       AC(3,8) = 2,785,999

--------

My program VPCalc is quite unique in its ability to perform
scientific calculations at whatever precision desired, up to a
ridiculously large precision.  To use the program, first browse the
file VPCalc.Doc.  Some of VPCalc's features are:

    0  It is a variable precision scientific calculator.
    0  Written in object-oriented Turbo Pascal 5.5/6.0.
    0  It is its own full program language interpreter.
    0  Integrated code parsing, interpreting and evaluating.
    0  Floating point numbers normalized from both ends.  Neither
       most significant nor least significant zeros stored in memory.
    0  Dynamic memory allocation as new variables are introduced or
       changed.
    0  Pop up help menus.
    0  Full command line editing features.
    0  Internal calculations performed at higher precision to
       minimize round-off error.
    0  Each Taylor series terms only computed to precision required.
    0  Optimal reduction of argument for Taylor series.

Read the section on "Transcendental Function Evaluation" near end
of VPCalc.Doc file for other original methods.

The new version attempts to perform all calculations as if they
were done to infinite precision and then rounded to even.  The IEEE
floating-point standard requires that add, subtract, multiply,
divide, and square root be done this way.  It is not a requirement
for the transcendental functions, but I put guard digits on them
also.  The calculations done by VPCalc are a lot more stable now.

Also the new version has many new features to make the program
easier to use.  For example, it saves the history of operator
entries for re-execution like XTree Pro Gold.  Also, the complete
state of the calculator can be saved to disk and restored at a
later time.

Some of VPCalc's new features are:

    0  Save/Restore history of previous operator entries.
    0  Save/Restore current calculator configuration.
    0  Save/Restore the complete state of the calculator.
    0  Clear history of previous operator entries.
    0  Restore Last Top, like Last x on HP calculators.
    0  Enable/Disable save Last Top.
    0  Fix display vice scientific notation for low precision numbers.
    0  Enable/Disable force scientific notation.
    0  Run a code file procedure.
    0  Read a number file procedure.
    0  Write a number file procedure.
    0  Run VPCalc code file AUTOEXEC.VPC on start-up.
    0  A:> VPCALC xxxxxxxx.VPC   will run file xxxxxxxx.VPC


Sincerely,



Harry J. Smith

Return to Ackermann's Function
Return to Harry's Home Page


This page accessed times since October 20, 2004.
Page created by: hjsmithh@sbcglobal.net
Changes last made on Sunday, 03-Jul-05 08:19:23 PDT

1