Anzeigen des Gesamtinhalts (oder Logo links anklicken) oder des Impressums.

Dies ist eine alte Version des Dokuments!


Vergleichsprogramme (Benchmark)

Zum Vergleich kleiner Rechner ist Forth gut geeignet, da der Implemetaionsaufwand gering ist. Hierzu sind kleine Programme mit üblichem Sprachumfang sinnvoll, wie sie auf http://theultimatebenchmark.org/ gezeigt werden.

Ein weiterer Kandidat ist die Collatz-Folge:

collatz.fc
\ Benchmark mit der Collatz-Funktion
\   c[n+1] = if even(c[n]) then c[n]/2 else 3*c[n]+1 fi
\ Da der zweite Term immer gerade ist, wird
\   c[n+1] = if odd(c[n]) then c[n]/2 else (3*c[n]+1)/2 fi
\ Seien r[n] der Rest und q[n] der Quotient von c[n]/2, also c[n] = 2*q[n] + r[n], somit bei r[n] = 1:
\ (3*c[n]+1)/2 = 3*q[n] + 2
 
\ Collatz-Schritt:
: cn+1 		( cn -- cm )
  2 /mod swap			
  if 3 * 2 + endif
;
 
\ Collatz-Folge drucken
: coll. 	( cn -- )
  begin dup 1 > while
  cn+1 dup .
  repeat
  drop		( always 1 )
;
 
\ Collatz-Folge zaehlen
: ccnt 		( cn -- cnt)
  0 swap 	( cnt cn )
  begin dup 1 > while
  cn+1 swap 1+ swap
  repeat
  drop
;
 
\ Maximum fuer alle Folgen bis k bestimmen
: cmax 		( k -- max )
  0 swap	( max k )
  begin dup 0> while
    dup ccnt 	( max k cnt )
    rot  	( k cnt max )
    max		( k max )
    swap	( max k )
    1 -		( max k-1 )
  repeat
  drop
;
 
32101 cmax .	
." = 194 ! "
 
: bench
  99 0 do 32101 cmax drop loop
;
 
bench

Übersetzungen:
Anmelden