

|
 |
| Programming > Forth > Taylor series F... |
|
| << Topic |
< Post |
Post 1 of 6 Topic 4019 of 4050
|
Post > |
Topic >> |
Taylor series FSIN, FCOS, FTAN
by "The Beez'" <hansoft@[EMAIL PROTECTED]
>
Apr 26, 2008 at 04:12 AM
| Thanks for your replies! I've come up with these ones, based on the
Taylor series. It requires a separate FP stack and can't be used for
large values as well, (which function should I use, Albert, to reduce
this one?), but it is rather simple and relatively accurate.
Hans Bezemer
[UNDEFINED] fsin [IF]
[UNDEFINED] floats [IF]
include lib/ansfloat.4th
[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
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 >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-10)
;
: ftan fdup fsin fswap fcos f/ ; \ ftan = fsin / fcos
[DEFINED] 4TH# [IF]
hide (taylor)
hide +taylor
hide -taylor
hide >taylor
[THEN]
[THEN]
fclear 100 set-precision
s" 0.7854" s>float fsin f.
s" 0.7854" s>float fcos f.
s" 0.7854" s>float ftan f.
cr


|
6 Posts in Topic:
|
"The Beez'" < |
2008-04-26 04:12:45 |
|
Albert van der Horst < |
2008-04-27 10:30:59 |
|
"The Beez'" < |
2008-04-27 08:32:25 |
|
Albert van der Horst < |
2008-04-27 17:04:51 |
|
"The Beez'" < |
2008-04-27 08:45:45 |
|
"The Beez'" < |
2008-04-28 02:33:38 |
|
Post A Reply:

|
|
|
|