| 000 03.06.2017, 15:33 Uhr
 _lars
 
 
   
 
 | Außer Pseudozufallszahlen kann man auch hin und wieder den Sinus (bzw. Kosinus) eines Winkels gut für irgendwelche Berechnungen brauchen. Ich habe also mal nach Sinus für Forth gesucht und das hier gefunden: 
 https://wiki.forth-ev.de/doku.php/words:sinus
 
 und weil es so schön ist angepasst auf KC Forth portiert:
 
 
 
 | Quellcode: |  | 0000 VARIABLE sinuslookup
 0349 ,  0698 ,  1045 ,
 1392 ,  1736 ,  2079 ,  2419 ,
 2756 ,  3090 ,  3420 ,  3746 ,
 4067 ,  4384 ,  4695 ,  5000 ,
 5299 ,  5592 ,  5878 ,  6157 ,
 6428 ,  6691 ,  6947 ,  7193 ,
 7431 ,  7660 ,  7880 ,  8090 ,
 8290 ,  8480 ,  8660 ,  8829 ,
 8988 ,  9135 ,  9272 ,  9397 ,
 9511 ,  9613 ,  9703 ,  9781 ,
 9848 ,  9903 ,  9945 ,  9976 ,
 9994 ,  10000 ,
 
 -1 CONSTANT TRUE
 0 CONSTANT FALSE
 : NEGATE -1 * ;
 : SINUS@ 2 * sinuslookup + @ ;
 : SIN ( GRAD -- SINUS )
 DUP 0< >R ABS
 360 MOD
 DUP 180 >
 IF 180 - TRUE >R
 ELSE FALSE >R ENDIF
 DUP  90 >
 IF 180 SWAP - ENDIF
 2 / SINUS@
 R> IF NEGATE ENDIF
 R> IF NEGATE ENDIF ;
 : COS 90 + SIN ;
 
 | 
 
 
 Diese Version hat aus Gründen der begrenzten Größe der Screens in KC Forth nur 45 Tabellenwerte (statt 90 wie im Original) und deshalb auch die unschöne Division durch zwei vor dem Lookup. Aber was soll’s, es funktioniert hinreichend gut.
 
 Hier noch mal der Code zum direkten Einfügen (rechte Maustaste im JKCEMU) des Codes nach dem Starten von Forth:
 
 
 
 | Quellcode: |  | 1 SCR !
 EDITOR
 0 P  0000 VARIABLE sinuslookup
 1 P  0349 ,  0698 ,  1045 ,
 2 P  1392 ,  1736 ,  2079 ,  2419 ,
 3 P  2756 ,  3090 ,  3420 ,  3746 ,
 4 P  4067 ,  4384 ,  4695 ,  5000 ,
 5 P  5299 ,  5592 ,  5878 ,  6157 ,
 6 P  6428 ,  6691 ,  6947 ,  7193 ,
 7 P  7431 ,  7660 ,  7880 ,  8090 ,
 8 P  8290 ,  8480 ,  8660 ,  8829 ,
 9 P  8988 ,  9135 ,  9272 ,  9397 ,
 10 P 9511 ,  9613 ,  9703 ,  9781 ,
 11 P 9848 ,  9903 ,  9945 ,  9976 ,
 12 P 9994 ,  10000 ,
 FORTH
 1 LOAD
 
 2 SCR !
 EDITOR
 0 P  -1 CONSTANT TRUE
 1 P  0 CONSTANT FALSE
 2 P  : NEGATE -1 * ;
 3 P  : SINUS@ 2 * sinuslookup + @ ;
 4 P  : SIN ( GRAD -- SINUS )
 5 P    DUP 0< >R ABS
 6 P    360 MOD
 7 P    DUP 180 >
 8 P    IF 180 - TRUE >R
 9 P    ELSE FALSE >R ENDIF
 10 P   DUP  90 >
 11 P   IF 180 SWAP - ENDIF
 12 P   2 / SINUS@
 13 P   R> IF NEGATE ENDIF
 14 P   R> IF NEGATE ENDIF ;
 15 P : COS 90 + SIN ;
 FORTH
 2 LOAD
 
 3 SCR !
 EDITOR
 0 P : SINCURVE
 1 P   12 EMIT 7 INKP
 2 P   320 0 DO ?TERMINAL
 3 P     IF LEAVE ENDIF
 4 P     1 I
 5 P     I 360 320 */ SIN
 6 P     128 10000 */ 128 +
 7 P     PIX
 8 P   LOOP ;
 FORTH
 3 LOAD
 
 SINCURVE
 
 | 
 
 |