--- gforth/float.fs 2002/11/02 15:26:03 1.38 +++ gforth/float.fs 2004/05/08 17:14:30 1.43 @@ -1,6 +1,6 @@ \ High level floating point 14jan94py -\ Copyright (C) 1995,1997 Free Software Foundation, Inc. +\ Copyright (C) 1995,1997,2003 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -72,12 +72,12 @@ DOES> ( -- r ) \G floating-point stack. fp0 @ fp@ - [ 1 floats ] Literal / ; -: FLit ( -- r ) r> dup f@ float+ >r ; : FLiteral ( compilation r -- ; run-time -- r ) \ float f-literal \G Compile appropriate code such that, at run-time, @i{r} is placed \G on the (floating-point) stack. Interpretation semantics are undefined. - BEGIN here cell+ dup faligned <> WHILE postpone noop REPEAT - postpone FLit f, ; immediate + BEGIN here cell+ cell+ dup faligned <> WHILE postpone noop REPEAT + postpone ahead here >r f, postpone then + r> postpone literal postpone f@ ; immediate &15 Value precision ( -- u ) \ float-ext \G @i{u} is the number of significant digits currently used by @@ -211,7 +211,7 @@ set-current \G @code{f~abs}; r3=0: bitwise comparison; r3<0: @code{fnegate f~rel}. fdup f0= IF \ bitwise comparison - fp@ float+ 1 floats over float+ -text 0= + fp@ float+ 1 floats over float+ over str= fdrop fdrop fdrop EXIT THEN @@ -221,22 +221,3 @@ set-current ELSE fnegate f~rel THEN ; - -1e 53 0 [do] f2* [loop] fconstant fround-offset \ 2^53 - -: fround ( r1 -- r2 ) \ float f-round -\G Round to nearest integral value. Break ties with round-to-even. - \ assumes IEEE DP FP in round-to-even mode. - \ for an explanation of this code read - \ <2002Oct26.113823@a0.complang.tuwien.ac.at> ff. - fdup f0> if - fround-offset f- fround-offset f+ - else fdup f0< if \ leave 0e and -0e as is - fround-offset f+ fround-offset f- - then then ; - -: f.s ( -- ) \ gforth f-dot-s - \G Display the number of items on the floating-point stack, - \G followed by a list of the items; TOS is the right-most item. - ." <" fdepth 0 .r ." > " fdepth 0 max maxdepth-.s @ min dup 0 - ?DO dup i - 1- floats fp@ + f@ f. LOOP drop ;