--- gforth/float.fs 2012/05/26 10:20:01 1.65 +++ gforth/float.fs 2012/12/31 15:25:18 1.68 @@ -1,6 +1,6 @@ \ High level floating point 14jan94py -\ Copyright (C) 1995,1997,2003,2004,2005,2006,2007,2009,2010,2011 Free Software Foundation, Inc. +\ Copyright (C) 1995,1997,2003,2004,2005,2006,2007,2009,2010,2011,2012 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -131,9 +131,23 @@ DOES> ( -- r ) [IFDEF] fp-char : sfnumber ( c-addr u -- r true | false ) fp-char @ >float1 ; + +Create si-prefixes ," PTGMk munpf" +si-prefixes count bl scan drop Constant zero-exp + +: prefix-number ( c-addr u -- r true | false ) + si-prefixes count bounds DO + 2dup I c@ scan nip dup 0<> IF + 1 = IF 1- fp-char @ ELSE I c@ THEN + >float1 + dup IF 1000 s>f zero-exp I - s>f f** f* THEN + UNLOOP EXIT THEN drop + LOOP + sfnumber ; [ELSE] : sfnumber ( c-addr u -- r true | false ) >float ; +: prefix-number sfnumber ; [THEN] [ifdef] recognizer: @@ -149,7 +163,7 @@ DOES> ( -- r ) recognizer: r:fnumber : fnum-recognizer ( addr u -- float int-table | addr u r:fail ) - 2dup sfnumber + 2dup prefix-number IF 2drop r:fnumber EXIT THEN