version 1.26, 1999/05/06 21:33:32
|
version 1.27, 1999/05/15 20:00:20
|
Line 193 IS interpreter-notfound
|
Line 193 IS interpreter-notfound
|
\ : facosh fdup fdup f* 1.0e0 f- fsqrt f+ fln ; |
\ : facosh fdup fdup f* 1.0e0 f- fsqrt f+ fln ; |
\ : fasinh fdup fdup f* 1.0e0 f+ fsqrt f/ fatanh ; |
\ : fasinh fdup fdup f* 1.0e0 f+ fsqrt f/ fatanh ; |
|
|
\ !! factor out parts |
: f~abs ( r1 r2 r3 -- flag ) \ gforth |
: f~ ( f1 f2 f3 -- flag ) \ float-ext |
\G Approximate equality with absolute error: |r1-r2|<r3. |
|
frot frot f- fabs fswap f< ; |
|
|
|
: f~rel ( r1 r2 r3 -- flag ) \ gforth |
|
\G Approximate equality with relative error: |r1-r2|<r3*|r1+r2|. |
|
frot frot fover fabs fover fabs f+ frot frot |
|
f- fabs frot frot f* f< ; |
|
|
|
: f~ ( r1 r2 r3 -- flag ) \ float-ext |
|
\G ANS Forth medley: r3>0: @code{f~abs}; r3=0: r1=r2; r3<0: @code{fnegate f~abs}. |
fdup f0= |
fdup f0= |
IF |
IF |
fdrop f= EXIT |
fdrop f= \ !! this does not work, because 0=-0 with f= on Linux-Intel |
|
\ the standard says they should compare unequal |
|
\ the comparison should be done with COMPARE |
|
EXIT |
THEN |
THEN |
fdup f0> |
fdup f0> |
IF |
IF |
frot frot f- fabs fswap |
f~abs |
ELSE |
ELSE |
fnegate frot frot fover fabs fover fabs f+ frot frot |
fnegate f~rel |
f- fabs frot frot f* |
THEN ; |
THEN |
|
f< ; |
|
|
|
: f.s ( -- ) \ gforth f-dot-s |
: f.s ( -- ) \ gforth f-dot-s |
\G Display the number of items on the floating-point stack, |
\G Display the number of items on the floating-point stack, |