Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \ Test string for floating-point number (Forth)
- \ kernel functions
- \ /char ( a u -- a+1 u-1 c )
- \ /sign ( a u -- a' u' f ) \ handles +/-
- \ /number ( a u -- a' u' d|ud ) \ handles +/-
- \ >digit ( c base -- u -1 | c 0 )
- variable dpf \ decimal point
- : /digs ( adr len -- adr' len' )
- begin dup while
- /char #10 >digit while
- drop
- repeat drop -1 /string then ;
- : /mant ( adr len -- adr' len' flag )
- tuck /digs dup if
- over c@ [char] . = if
- dpf on 1 /string /digs
- then
- then rot over - dpf @ + ;
- : /exp ( adr len -- adr' len' )
- dup if
- over c@ 33 or [char] e = ( 'D' 'E' 'd' 'e')
- negate /string
- then
- /number 2drop ;
- \ Test string for float; stop at unconvertible char
- : /FLOAT ( adr len -- adr' len' )
- dpf off /sign drop /mant if /exp then ;
- \ Test string for float; return true/false
- : FLOAT? ( c-addr u -- f )
- -trailing /float nip 0= ;
- s" 123" float? cr .
- s" +123" float? cr .
- s" -123" float? cr .
- s" 123." float? cr .
- s" 123e+4" float? cr .
- s" 123D" float? cr .
- s" 123.." float? cr . ( fails)
Advertisement
Add Comment
Please, Sign In to add comment