rendered paste body\ tpk.fs: Knuth's TPK program in ISO/ANS Standard Forth (compiled by Gforth 0.6.2)
: farray ( u "name" -- )
create floats allot does> ( i -- f-addr ) swap floats + ;
10 farray A[]
80 constant /input
create input /input chars allot
: getfloat ( F: -- r )
begin
input dup /input accept >float 0= while
." Invalid input, please re-enter:" cr
repeat ;
: f ( F: r1 -- r2 )
\ f(x) = sqrt(|x|) + 5*x**3
fdup fabs fsqrt fswap 3e f** 5e f* f+ ;
: tpk ( -- )
11 0 do i . getfloat i A[] f! cr loop cr
0 10 do i A[] f@ f
fdup 400e f> if i . ." too large" fdrop else i . f. then cr
-1 +loop ;