### Diff for /gforth/float.fs between versions 1.26 and 1.27

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,

 Removed from v.1.26 changed lines Added in v.1.27

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>