/*************************************************************************************************************************************/
/* */
/* 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 */
/* */
}