For floating-point numbers in Forth, you recognize them due to their
exponent. I.e., by default 1. is a double-cell integer, and
1e0 is a floating-point number; the latter can be (and usually
is) shortened to 1e. Both the significand (the part before the
e or E) and the exponent may have signs (including
+); the significand must contain at least one digit and may
contain a decimal point, the exponent can be empty. Floating-point
numbers always use decimal base for both significand and exponent, and
are only recognized when the base is decimal. Examples are: 1e
1e0 1.e 1.e0 +1e+0 (which all represent the same number)
+12.E-4.
With the setting 0 to .-is-dcell?, Gforth (since 1.0) does not
recognize prefixless numbers with a decimal point as double-cell
integers, but recognizes them as FP numbers instead. Note that
standard Forth systems (such as the default setting of Gforth) behave
differently, so we recommend always using e to signify FP
numbers.
A Gforth extension (since 1.0) is to write a floating-point number in
scaled notation: It can optionally have a sign, then one or more
digits, then use one of the mostly SI-defined scaling symbols (aka
metric prefixes) or %, and then optionally more digits. Here’s
the full list of scaling symbols that Gforth accepts:
Q e30 quetta
R e27 ronna
Y e24 yotta
Z e21 zetta
X e18 exa (not E)
P e15 peta
T e12 tera
G e9 giga
M e6 mega
k e3 kilo
h e2 hecto
d e-1 deci
% e-2 percent (not c)
m e-3 milli
u e-6 micro (not μ)
n e-9 nano
p e-12 pico
f e-15 femto
a e-18 atto
z e-21 zepto
y e-24 yocto
r e-27 ronto
q e-30 quecto
Unlike most of the rest of Gforth, scaling symbols are treated
case-sensitively. Using the scaled notation is equivalent to using a
decimal point instead of the scaling symbol and appending the
exponential notation at the end. Examples of scaled notation:
6k5 (6500e) 23% (0.23e).
In Gforth (since 1.0) you can input a complex number with
real+imaginaryi, where both real and
imaginary are strings that are recognized as floating-point
numbers. E.g., 1e+2ei. This pushes the values 1e and
2e on the floating-point stack, so one might just as well have
written 1e 2e, but 1e+2ei makes the intent obvious.