gameduino/j1/firmware/sincos.fs

37 lines
522 B
Forth

( Sine and cosine JCB 18:29 11/18/10)
create sintab
meta
: mksin
65 0 do
i s>d d>f 128e0 f/ pi f* fsin
32767e0 f* f>d drop
t,
loop
;
mksin
target
: sin ( th -- v )
dup d# 128 and >r
d# 127 and
dup d# 63 > if
invert d# 129 + \ 64->64, 65->63
then
cells sintab + @
r> if
negate
then
;
: cos d# 64 + sin ;
: sin* ( s th -- sinth * s )
sin swap 2* m* nip ;
: cos* ( s th -- costh * s )
cos swap 2* m* nip ;