Files
ueforth/common/floats.fs
Brad Nelson 74d744dd00 Adding Recognizers, and more.
Adding the proposed recognizers vocabulary, including a limited test.
Fixing windows build to better handle different VS versions.
Fixing various hidden word bugs.
Adding 3DUP opcode.
Bumping version number.
2024-04-20 02:10:42 -07:00

50 lines
1.5 KiB
Forth

\ Copyright 2021 Bradley D. Nelson
\
\ Licensed under the Apache License, Version 2.0 (the "License");
\ you may not use this file except in compliance with the License.
\ You may obtain a copy of the License at
\
\ http://www.apache.org/licenses/LICENSE-2.0
\
\ Unless required by applicable law or agreed to in writing, software
\ distributed under the License is distributed on an "AS IS" BASIS,
\ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\ See the License for the specific language governing permissions and
\ limitations under the License.
: sf, ( r -- ) here sf! sfloat allot ;
: afliteral ( r -- ) ['] DOFLIT , sf, align ;
: fliteral afliteral ; immediate
: fconstant ( r "name" ) create sf, align does> sf@ ;
: fvariable ( "name" ) create sfloat allot align ;
6 value precision
: set-precision ( n -- ) to precision ;
( Add recognizer for floats. )
also recognizers definitions
: REC-FNUM ( c-addr len -- f addr1 | addr2 )
s>float? if
['] afliteral RECTYPE-NUM
else
RECTYPE-NONE
then
;
' REC-FNUM +RECOGNIZER
previous definitions
internals definitions
: #f+s ( r -- ) fdup precision for aft 10e f* then next
precision for aft fdup f>s 10 mod [char] 0 + hold 0.1e f* then next
[char] . hold fdrop f>s #s ;
forth definitions internals
: #fs ( r -- ) fdup f0< if fnegate #f+s [char] - hold else #f+s then ;
: f. ( r -- ) <# #fs #> type space ;
: f.s ." <" fdepth n. ." > "
fdepth 0 max for aft fp@ r@ sfloats - sf@ f. then next ;
forth definitions