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