[gforth] / gforth / float.fs

# gforth: gforth/float.fs

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

version 1.26, Thu May 6 21:33:32 1999 UTC version 1.27, Sat May 15 20:00:20 1999 UTC
 Line 193
 Line 193
\ : 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,

Generate output suitable for use with a patch program
Legend:
 Removed from v.1.26 changed lines Added in v.1.27