--- gforth/float.fs 2002/12/05 19:25:23 1.39 +++ gforth/float.fs 2004/12/08 11:26:59 1.45 @@ -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. @@ -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 @@ -222,21 +222,14 @@ set-current fnegate f~rel THEN ; -1e 53 0 [do] f2* [loop] fconstant fround-offset \ 2^53 +\ proposals from Krishna Myeni in +\ not sure if they are a good idea -: 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 ; +: FTRUNC ( r1 -- r2 ) + \ round towards 0 + \ !! should be implemented properly + F>D D>F ; + +: FMOD ( r1 r2 -- r ) + \ remainder of r1/r2 + FOVER FOVER F/ ftrunc F* F- ;