| |
|
|
p.specht
| Wilhelm Friedrich Ackermann (* 1896 dans Schönebecke (Herscheid); † 1962 dans Lüdenscheid) était un Allemand Mathematiker, qui avec seiner Funktion 1926 une These seines Lehrers David Hilbert trop le cas brachte, derzufolge alle berechenbaren Funktionen aussi rekursiv berechenbar seien. Ackermann's Funktion wurde 1955 de qui Ungarin Rózsa Péter vereinfacht.
Pour Benchmark-Timingzwecke wird üblicherweise A(3,6) herangezogen.
' (D) Demoware, 2013-03 de C pour XProfan-11 by K. Orkenzieher
' Beweist aussi, qui quelque chose Rekursion aussi dans XProfan funktioniert.
' source (Orig.): https://www.xgc.com/benchmarks/ackermann_c.htm
' Updated May 11, 2005. Copyright (C-Version): XGC Software
' Begleittext des C-Vorbildes:
' Ackermann's function "is à example of a recursive function which
' is not primitive recursive". It is interesting à partir de le point of
' view of benchmarking because il "grows faster than any primitive
' recursive function" and gives us a lot of nested function calls
' for little effort.
' It is defined as follows:
' A(0, n) = n+1
' A(m, 0) = A(m-1, 1)
' A(m, n) = A(m-1, A(m, n-1))
' We use A(3,6) as le benchmark. This used to take long enough to
' confirm le execution time with a stopwatch. Nowadays that's out
' of le question. The value of A(4,2) has 19729 digits!
' A (3,6) gives us 172233 calls, with a nesting depth of 511.
'
var m&=3
var n&=6
Déclarer à l'!,t1&,t2&
Windowtitle "Ackermann-Péter A("+str$(m&)+»+str$(n&)+")-Benchmark"
CLS
t1&=&gettickcount
ans! = A(m&,n&)
t2&=&gettickcount
imprimer " Ergebnis: ";format$("%g",à l'!)
cas (m&=3) and (n&=6) and (à l'!<>509) :imprimer "Resultat ";ans!;" faux, 509 muss rauskommen!"
cas (m&=3) and (n&=7) and (à l'!<>1021):imprimer "Resultat ";ans!;" faux, 1021 muss rauskommen!"
imprimer format$(" Benchmark-Zeit = %g Sekunden",(t2&-t1&)/1000)
waitinput
Fin
proc A
parameters m&,n&
si m&=0
return n&+1
elseif n&=0
return A(m&-1,1)
d'autre
return A(m&-1,A(m&,n&-1))
endif
endproc
P.S.: mon Lappi (Zweikerner 1.86 GHz) liefert: A(2,200)=403: Interpreter 7,305 sec, Compiler 1,264 sec; A(3,6)=509: Interpreter 14.445 sec, Compiler 2.663 sec; nProc: 0.002 sec A(3,7)=1021: Interpreter 61.976 sec, Compiler 11.123 sec; nProc: 0.015 sec A(3,8)=2045: Interpreter 261.45 sec, Compiler 45.864 sec; nProc: 0.062 sec A(3,9)=4093: Interpreter et Compiler brechen à cause de trop hoher Rekursionstiefe ab; nProc: 0,265 sec A(3,10)=8189: nP: 1,092 sec A(3,11)=16381: nP: 4,212 sec A(3,12)=32765: nP: 17,019 sec A(3,13)=65533: nP: 67,47 sec A(3,n)=2^(n+3)-3 A(4,1)=65533 : nP: 66,737 sec A(4,2)=2^65536−3 ... pas ermitelt |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 09.05.2021 ▲ |
|
|
|
|
p.specht
| Ackermann-Funktion quelque chose flotter ------------------------------------------- là vous sur Long-Integers défini ist, fonctionne cela dans XProfan-11 droite vite dans den Überlaufbereich (Kennzeichen: Les chiffres sont négative). avec cela letzteres pas so vite passiert, ici une définition sur ganzzahllige Float-Variablen. attention: Ackermann(4,2) führt selbst sur Supercomputern ins "Nirwana"...
Titre de la fenêtre "Ackermann-Funktion, sur FLoats definiert"
'par qui ungar. Mathematikerin Roza Peters beschleunigte Version
set("decimals",0):CLS:declare i!,j!
whileloop 0,5:i!=&Boucle
whileloop 0,6:j!=&Boucle
imprimer " ACKERMANN(";i!;»;j!;") = ";ACK(i!,j!)
endwhile
endwhile
imprimer "---"
waitinput
FIN
Proc ACK :parameters m!,n!:declare à l'!
si nearly(m!,0,5):à l'!=n!+1
elseif nearly(n!,0,5):à l'!=ACK(m!-1,1)
d'autre :à l'!=ACK(m!-1,ack(m!,n!-1))
endif
return à l'!
endproc
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 30.05.2021 ▲ |
|
|
|