Albert, I think I figured it out (your routine). This feels quite good (and the test ranges come back fine too ;-) Hans Bezemer [UNDEFINED] fsin [IF] [UNDEFINED] floats [IF] include lib/ansfloat.4th [THEN] : >range pi fdup f+ \ x pi2 fover fover f/ \ x pi2 x/pi2 floor fover f* \ x pi2 mod(x,pi2) frot fswap f- \ pi2 mod(x,pi2) pi fover \ pi2 mod pi mod f- f0< if fswap f- else fnip then ; : f-rot frot frot ; \ inverted frot : >taylor fdup f* fover ; \ setup for Taylor series : (taylor) fover f* frot fover s>f f/ ; : +taylor (taylor) f+ f-rot ; \ add Taylor iteration : -taylor (taylor) f- f-rot ; \ subtract Taylor iteration : fsin >range fdup >taylor ( x x2 x) 6 -taylor ( x-3 x2 x3) 120 +taylor ( x+5 x2 x5) 5040 -taylor ( x-7 x2 x7) 362880 +taylor ( x+9 x2 x9) 39916800 -taylor ( x-11 x2 x11) fdrop fdrop ( x-11) ; : fcos 1 s>f fswap >range >taylor ( 1 x2 1) 2 -taylor ( 1-2 x2 x2) 24 +taylor ( 1+4 x2 x4) 720 -taylor ( 1-6 x2 x6) 40320 +taylor ( 1+8 x2 x8) 3628800 -taylor ( 1-10 x2 x10) 479001600 +taylor ( 1+12 x2 x12) fdrop fdrop ( 1+12) ; : ftan fdup fsin fswap fcos f/ ; \ ftan = fsin / fcos [DEFINED] 4TH# [IF] hide >range hide (taylor) hide +taylor hide -taylor hide >taylor [THEN] [THEN]