/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   D E   A C K E R M A N   E N   F L O T T A N T  :                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/Ackerman.02$c' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 19991020120000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  <stdio.h>

#define   PRECIS    double                                                                                                              \
                                        /* Possibilite introduite le 20120104174231...                                               */

PRECIS    ackerman(m,n)
                                        /* La fonction d'Ackerman est une fonction calculable (au sens de Turing), sans etre         */
                                        /* primitive recursive. Les fonctions 'f' de type "primitive recursive" sont definies        */
                                        /* par des formules du type :                                                                */
                                        /*                                                                                           */
                                        /*                  f(m1,m2,...,mk,0)   = g(m1,m2,...,mk)                                    */
                                        /*                  f(m1,m2,...,mk,N+1) = h(m1,m2,...,mk,N,f(m1,m2,...,mk,N))                */
                                        /*                                                                                           */
                                        /* La fonction d'Ackerman croit beaucoup plus vite que toute exponentielle...                */
PRECIS    m;
PRECIS    n;
          {
          if        (m <= 0.0)
                    {
                    return(n+1.0);
                    }
          else
                    {
                    if        (n <= 0.0)
                              {
                              return(ackerman(m-1.0,1.0));
                              }
                    else
                              {
                              return(ackerman(m-1.0,ackerman(m,n-1.0)));
                              }
                    }
          }

void      main()
          {
          int       NumberOfInputs;
          PRECIS    m,n;
                                        /* Aguments de la fonction.                                                                  */

          printf("\n m=");
          NumberOfInputs=scanf("%lf",&m);
          printf("\n n=");
          NumberOfInputs=scanf("%lf",&n);

          printf("\n Ackerman(%f,%f) = %f\n",m,n,ackerman(m,n));
                                        /* Quelques resultats de 'time' pour 'ackerman(4,1)' (soit m=4 et n=1) :                     */
                                        /*                                                                                           */
                                        /*                  CMAP27    cc        695.100u  0.650s 11:38.90 99.5%  0+0k 0+0io 94pf+0w  */
                                        /*                  CMAP27    cc -O3    758.360u  0.680s 12:43.91 99.3%  0+0k 0+0io 94pf+0w  */
                                        /*                                                                                           */
                                        /*                  LACT27    cc -O3    530.8u    1.9s 9:10 96%          0+0k 0+0io 0pf+0w   */
                                        /*                                                                                           */
                                        /*                  LACT29    cc        798.2u    0.5s 13:30 98%         0+0k 0+0io 0pf+0w   */
                                        /*                  LACT29    cc -O3    595.9u    0.3s 10:07 98%         0+0k 0+0io 0pf+0w   */
                                        /*                                                                                           */
                                        /* Avantage a 'CMAP27' et a 'LACT27' sur 'LACT29' !                                          */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Nouveaux tests le 20041013143200 :                                                        */
                                        /*                                                                                           */
                                        /*                  LACT15    cc        102.750u  0.000s 1:47.55 95.5%   0+0k 0+0io 99pf+0w  */
                                        /*                  LACT15    cc -O3    108.190u  0.100s 1:50.67 97.8%   0+0k 0+0io 99pf+0w  */
                                        /*                                                                                           */
                                        /*                  LACT16    cc        133.390u  0.000s 2:19.29 95.7%   0+0k 0+0io 101pf+0w */
                                        /*                  LACT16    cc -O3     50.350u  0.000s 0:52.11 96.6%   0+0k 0+0io 101pf+0w */
                                        /*                                                                                           */
                                        /*                  sumix11   cc        user=1m59.250s sys=0m0.250s                          */
                                        /*                  sumix11   cc -O3    user=1m14.690s sys=0m0.000s                          */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Nouveaux tests le 20041208092641 :                                                        */
                                        /*                                                                                           */
                                        /*                  LACT17    cc         84.756u 0.007s 1:26.33 98.1%    0+0k 0+0io 0pf+0w   */
                                        /*                  LACT17    cc -O3     12.933u 0.003s 0:14.74 87.7%    0+0k 0+0io 0pf+0w   */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Nouveaux tests le 20051110150725 :                                                        */
                                        /*                                                                                           */
                                        /*                  CMAP28    cc         237.260u 0.080s 7:47.97 50.7%   0+0k 0+0io 99pf+0w  */
                                        /*                  CMAP28    cc -O3     229.810u 0.120s 3:54.26 98.1%   0+0k 0+0io 99pf+0w  */
                                        /*                                                                                           */
                                        /*                  LACT16    cc         134.680u 0.040s 2:17.33 98.0%   0+0k 0+0io 101pf+0w */
                                        /*                  LACT16    cc -O3     50.270u 0.050s 0:53.57 93.9%    0+0k 0+0io 101pf+0w */
                                        /*                                                                                           */
                                        /*                  liberte   cc         63.644u 0.014s 7:05.93 14.9%    0+0k 0+0io 0pf+0w   */
                                        /*                  liberte   cc -O3     33.865u 0.012s 0:37.49 90.3%    0+0k 0+0io 0pf+0w   */
                                        /*                            (Pentium M 1.70GHz)                                            */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Nouveaux tests le 20120104173632 :                                                        */
                                        /*                                                                                           */
                                        /*                  LACT18    $Cc        63.371u 0.020s 1:04.94 97.6%    0+0k 0+0io 0pf+0w   */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Nouveaux tests le 20120104140215 :                                                        */
                                        /*                                                                                           */
                                        /*   LACT19    $Cc                           21.040u 0.020s 0:26.14 80.5%  0+0k 0+0io 0pf+0w */
                                        /*             (double)                                                                      */
                                        /*   LACT19    $Cc                           41.640u 0.000s 0:43.33 96.0%  0+0k 0+0io 0pf+0w */
                                        /*             (float)                                                                       */
                                        /*   LACT19    cc -O3                         6.730u 0.010s 0:08.67 77.7%  0+0k 0+0io 0pf+0w */
                                        /*             (double)                                                                      */
                                        /*   LACT19    cc -O3 -ffloat-store          13.330u 0.000s 0:15.42 86.4%  0+0k 0+0io 0pf+0w */
                                        /*             (double)                                                                      */
                                        /*   LACT19    cc -O3 -fPIC                  16.310u 0.000s 0:18.03 90.4%  0+0k 0+0io 0pf+0w */
                                        /*             (double)                                                                      */
                                        /*   LACT19    cc -O3 -ffloat-store -fPIC    21.130u 0.000s 0:23.30 90.6%  0+0k 0+0io 0pf+0w */
                                        /*             (double)                                                                      */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Nouveaux tests le 20160928165023 :                                                        */
                                        /*                                                                                           */
                                        /*   LACT19    $Cc                           10.950u 0.000s 0:14.05 77.9%  0+0k 0+0io 0pf+0w */
                                        /*   LACT1A    $Cc                           13.360u 0.000s 0:22.31 59.8%  0+0k 0+0io 0pf+0w */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Nouveaux tests le 20210913082850 :                                                        */
                                        /*                                                                                           */
                                        /*   LACT19    $Cc                           11.220u 0.020s 0:13.67 82.2%  0+0k 0+0io 0pf+0w */
                                        /*   LACT1B    $Cc                           15.100u 0.000s 0:33.72 44.7%  0+0k 0+0io 0pf+0w */
                                        /*                                                                                           */
          }



Copyright © Jean-François Colonna, 2021-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2021-2023.