201a
<< <> >>

201

Die Programmiersprache Forth
home

Signed- und Unsigned-Zahlen

Leo: Meiner Meinung nach steckt in deinem Forth ein Fehler. Sieh doch mal, was da passiert:
2 4 MAX . [rtn] 4 ok
200 400 MAX . [rtn] 400 ok
Bis jetzt noch nichts. Aber nun:
20000 40000 MAX . [rtn] 20000 ok
Das ist überhaupt nicht o.k. Absoluter Unsinn! Ich weiß, was bei MAX ( x y - z ) herauskommen muss. Das Ergebnis ist die größere der beiden Zahlen x und y, und das stimmt hier ganz und gar nicht. Ist dir das noch nie aufgefallen?
Theo: Tja, ich muss sagen, das sieht wirklich seltsam aus ... aber richtig ist es trotzdem.
Leo: Ich bin selbst so fleißig gewesen und habe versucht, MAX neu und besser zu definieren:
: MEINMAX ( x y - z )
  2DUP < IF NIP EXIT THEN DROP ;
Das Verrückte an dieser Definition ist aber, dass sie denselben Fehler macht.
20000 40000 MEINMAX . [rtn] 20000 ok
Theo: Der Fehler hängt mit dem KLEINER-ALS zusammen.
Leo: Wenn du das schon weißt, warum hast du es dann nicht verbessert? Du bist doch stets bemüht, dein Forth schneller und besser zu machen!
Theo: Das KLEINER-ALS ist kein Fehler, du hast es einfach falsch verwendet.
Leo: ??
Theo: Was sagst du hierzu:
20000 . [rtn]  20000 ok
40000 . [rtn]  -25536 ok
Leo: Du erwartest wahrscheinlich, dass mir die Sache jetzt klarer wird?
Theo: Und hierzu:
-25536 40000 - . [rtn]  0 ok
>>