201a
<< <> >>

201

De programmeertaal Forth
home

Signed en Unsigned getallen

Leo: Volgens mij zit er een fout in jouw Forth. Kijk eens wat er gebeurt:
2 4 MAX . [rtn] 4 ok
200 400 MAX . [rtn] 400 ok
Nog niks aan de hand. Maar nu:
20000 40000 MAX . [rtn] 20000 ok
Helemaal niet o.k. Dit is onzin! Ik weet wat MAX ( x y - z ) moet doen. Het resultaat z is de grootste van het paar x en y en dat klopt hier echt niet. Is je dat nooit eerder opgevallen?
Theo: Tja, ik moet zeggen dat het er raar uitziet, en toch.. het is correct.
Leo: Ik ben zelfs zo ijverig geweest om te proberen om MAX opnieuw en beter te definiëren:
: MIJNMAX ( x y - z )
  2DUP < IF NIP EXIT THEN DROP ;
Maar het gekke is dat die dezelfde fout maakt.
20000 40000 MIJNMAX . [rtn] 20000 ok
Theo: De fout hangt samen met de KLEINER-DAN.
Leo: Als je dat wel weet, waarom heb je hem dan niet verbeterd? Je bent toch altijd bezig om die Forth van jou sneller en beter te maken!
Theo: De KLEINER-DAN is niet fout, je hebt hem verkeerd gebruikt.
Leo: ??
Theo: Wat zeg je hier van:
20000 . [rtn]  20000 ok
40000 . [rtn]  -25536 ok
Leo: Je verwacht misschien dat dit verhelderend werkt?
Theo: En hiervan:
-25536 40000 - . [rtn]  0 ok
>>