Commit ad184565 authored by pknaggs's avatar pknaggs

Added x:stoftos (F>S S>F)

Changed F94 for F12
Added word number for DFFIELD: FFIELD: FTRUNC FVALUE SFFIELD:
Changed child stack effect for DFFIELD: FFIELD: SFFIELD:
Corrected typo for F.
Minor alteration to rational for FATAN2, FEXPM1
parent f970d6e9
% !TeX root = forth.tex
% !TeX spell check = en_US
\chapter{The optional Floating-Point word set} % 12
\wordlist{floating}
......@@ -264,6 +267,10 @@ See:
(\wref{floating:Fd}{F.},
\wref{floating:FEd}{FE.},
\wref{floating:FSd}{FS.}).
\item \place{x:stoftos}{\param{n} can't be precisely represented as
\emph{float} in \wref{floating:StoF}{S>F};}
\item \place{x:stoftos}{integer part of \emph{float} can't be represented
by \param{n} in \wref{floating:FtoS}{F>S}.}
\end{itemize}
\subsubsection{Other system documentation} % 12.4.1.3
......@@ -297,8 +304,8 @@ See:
\section{Compliance and labeling} % 12.5
\cbstart\patch{F94}
\subsection[Forth systems]{ANS\strike{3.5}{25} Forth systems} % 12.5.1
\cbstart\patch{F12}
\subsection[Forth-\snapshot systems]{Forth-\snapshot\strike{-1}{25} systems} % 12.5.1
\cbend
The phrase ``Providing the Floating-Point word set'' shall be
......@@ -314,8 +321,8 @@ The phrase ``Providing the Floating-Point Extensions word set'' shall
be appended to the label of any Standard System that provides all of
the Floating-Point and Floating-Point Extensions word sets.
\cbstart\patch{F94}
\subsection[Forth programs]{ANS\strike{3.5}{25} Forth programs} % 12.5.2
\cbstart\patch{F12}
\subsection[Forth-\snapshot programs]{Forth-\snapshot\strike{-1}{25} programs} % 12.5.2
\cbend
The phrase ``Requiring the Floating-Point word set'' shall be
......@@ -376,7 +383,7 @@ word sets.
does the text interpreter since the latter defines rules for
composing source programs whereas \word{toFLOAT} defines rules
for accepting data. \word{toFLOAT} is defined as broadly as is
feasible to permit input of data from \remove{F94}{ANS} Forth systems as well
feasible to permit input of data from Forth\place{F12}{-\snapshot} systems as well
as other widely used standard programming environments.
This is a synthesis of common FORTRAN practice. Embedded spaces
......@@ -385,7 +392,7 @@ word sets.
While \word{toFLOAT} is not required to treat a string of blanks
as zero, this behavior is strongly encouraged, since a future
version of \replace{F94}{ANS Forth}{this standard} may include such a requirement.
version of this standard may include such a requirement.
\end{rationale}
\end{worddef}
......@@ -806,7 +813,7 @@ word sets.
% ---------------------------------------------------------
\begin{worddef}{}{DFFIELD:}[d-f-field-colon][X:structures]
\begin{worddef}{1207}[40]{DFFIELD:}[d-f-field-colon][X:structures]
\item \stack{n_1 "<spaces>name"}{n_2}
Skip leading space delimiters. Parse \param{name} delimited by
......@@ -818,18 +825,18 @@ word sets.
given below.
\execute[name]
\cbstart\patch{ed11}
\stack{a-addr_{\sout{1}}}{\sout{a}\uline{df}-addr_{\sout{2}}}
\cbstart\patch{ed12}
\stack{\sout{a-}addr_{\uline{1}}}{\sout{df-}addr_{\uline{2}}}
\cbend
Add the \param{offset} calculated during the compile time action to
\cbstart\param{a-addr_{\sout{1}}}\cbend\
\cbstart\param{\sout{a-}addr_{\uline{1}}}\cbend\
giving the double-float aligned address
\cbstart\param{\sout{a}\uline{df}-addr_{\sout{2}}}.\cbend
\cbstart\param{\sout{df-}addr_{\uline{2}}}.\cbend
\see \wref{facility:+FIELD}{+FIELD},
\wref{facility:BEGIN-STRUCTURE}{BEGIN-STRUCTURE},
\wref{facility:END-STRUCTURE}{END-STRUCTURE}, \linebreak
\wref{facility:BEGIN-STRUCTURE}{BEGIN-STRUCTURE}, \\
\wref{facility:END-STRUCTURE}{END-STRUCTURE},
\rref{facility:FIELD:}{}.
\end{worddef}
......@@ -862,7 +869,7 @@ word sets.
\end{worddef}
\begin{worddef}[Fd]{1427}{F.}[f-dot]
\begin{worddef}[Fd]{1427}{F.{}}[f-dot]
\item \stack{}{} \stack[F]{r}{} or
\stack{r}{}
......@@ -879,11 +886,36 @@ word sets.
\rref{floating:Fd}{}.
\begin{rationale} % A.12.6.1.1427 F.
For example, \texttt{1E3} \word{Fd} displays \texttt{1000.} .
For example, \texttt{1E3} \replace{ed12}{\textbf{\texttt{F}}}{ \word{Fd}} displays \texttt{1000.} .
\end{rationale}
\end{worddef}
% ========== x:stoftos ==========
\begin{worddef*}[FtoS]{1471}{F>S}[F to S][x:stoftos]
\item \stack{}{n} \stack[F]{r}{} or \stack{r}{n}
\uline{\param{n} is the single-cell signed-integer equivalent of the
integer portion of \param{r}. The fractional portion of
\param{r} is discarded. An ambiguous condition exists if
the integer portion of \param{r} cannot be precisely
represented as a single-cell signed integer.}
\note \uline{Rounding the floating-point value prior to calling \word{FtoS} is
advised.}
\see \uline{\wref{floating:StoF}{}.}
\begin{implement}
\uline{\word{:} \word{FtoS} \word{p} r -{}- n )} \\
\tab \uline{\word{FtoD} \word[double]{DtoS}} \\
\uline{\word{;}}
\end{implement}
\end{worddef*}
% ==============================
\begin{worddef}{1474}{FABS}[f-abs]
\item \stack[F]{r_1}{r_2} or
\stack{r_1}{r_2}
......@@ -981,11 +1013,12 @@ word sets.
Thus the phrase \word{FSINCOS} \word{F/} is functionally
equivalent to \word{FTAN}, but is useful over only a limited
and discontinuous range of angles, whereas \word{FSINCOS} and
\word{FATAN2} are useful for all angles. This ordering has
\word{FATAN2} are useful for all angles.
\remove{ed12}{This ordering has
been found convenient for nearly two decades, and has the
added benefit of being easy to remember. A corollary to this
observation is that vectors in general should appear on the
stack in this order.
stack in this order.}
The argument order for \word{FATAN2} is the same, converting a
vector in the conventional representation to a scalar angle.
......@@ -1210,14 +1243,14 @@ word sets.
This function allows accurate computation when its arguments
are close to zero, and provides a useful base for the standard
exponential functions. Hyperbolic functions such as
\textsf{cosh($x$)} can be efficiently and accurately
\textsf{\replace{ed12}{cosh}{sinh}($x$)} can be efficiently and accurately
implemented by using \word{FEXPM1}; accuracy is lost in this
function for small values of $x$ if the word \word{FEXP} is
used.
An important application of this word is in finance; say a loan
is repaid at 15\% per year; what is the daily rate? On a computer
with single precision (six decimal digit) accuracy:
with single\place{ed12}{-}precision (six decimal digit) accuracy:
\begin{enumerate}
\item[1.] Using \word{FLN} and \word{FEXP}:
......@@ -1227,7 +1260,7 @@ word sets.
form the exponent using \word{FEXP} = 1.00038, and \\
subtract one (1) and convert to percentage = 0.038\%.
\end{enumerate}
Thus we only have two digit accuracy.
Thus we only have two\place{ed12}{-}digit accuracy.
\begin{enumerate}
\item[2.] Using \word{FLNP1} and \word{FEXPM1}:
......@@ -1239,9 +1272,9 @@ word sets.
\word{FEXPM1} = 3.82983E-4, and \\
convert to percentage = 0.0382983\%.
\end{enumerate}
This is full six digit accuracy.
This is full six\place{ed12}{-}digit accuracy.
The presence of this word allows the hyperbolic functions to
\replace{ed12}{The presence of this}{ This} \remove{ed12}{word} allows the hyperbolic functions to
be computed with usable accuracy. For example, the hyperbolic
sine can be defined as:
......@@ -1257,7 +1290,7 @@ word sets.
% ---------------------------------------------------------
\begin{worddef}{}{FFIELD:}[f-field-colon][X:structures]
\begin{worddef}{1517}{FFIELD:}[f-field-colon][X:structures]
\item \stack{n_1 "<spaces>name"}{n_2}
Skip leading space delimiters. Parse \param{name} delimited by
......@@ -1268,18 +1301,18 @@ word sets.
given below.
\execute[name]
\cbstart\patch{ed11}
\stack{a-addr_{\sout{1}}}{\sout{a}\uline{f}-addr_{\sout{2}}}
\cbstart\patch{ed12}
\stack{\sout{a-}addr_{\uline{1}}}{\sout{f-}addr_{\uline{2}}}
\cbend
Add the \param{offset} calculated during the compile time action to
\cbstart\param{a-addr_{\sout{1}}}\cbend\
\cbstart\param{\sout{a-}addr_{\uline{1}}}\cbend\
giving the float aligned address
\cbstart\param{\sout{a}\uline{f}-addr_{\sout{2}}}.\cbend
\cbstart\param{\sout{f-}addr_{\uline{2}}}.\cbend
\see \wref{facility:+FIELD}{+FIELD},
\wref{facility:BEGIN-STRUCTURE}{BEGIN-STRUCTURE},
\wref{facility:END-STRUCTURE}{END-STRUCTURE}, \linebreak
\wref{facility:BEGIN-STRUCTURE}{BEGIN-STRUCTURE}, \\
\wref{facility:END-STRUCTURE}{END-STRUCTURE},
\rref{facility:FIELD:}{}.
\end{worddef}
......@@ -1408,7 +1441,7 @@ word sets.
% ---------------------------------------------------------
\begin{worddef}{}{FTRUNC}[f-trunc][x:ftrunc]
\begin{worddef}{1627}{FTRUNC}[f-trunc][x:ftrunc]
\item \stack[F]{r_1}{r_2} or \stack{r_1}{r_2}
Round \param{r_1} to an integral value using the ``round
......@@ -1446,7 +1479,7 @@ word sets.
% ---------------------------------------------------------
\begin{worddef}{}{FVALUE}[f-value][X:fvalue]
\begin{worddef}{1628}{FVALUE}[f-value][X:fvalue]
\item \stack[F]{r}{} \stack{"<spaces>name"}{} or
\stack{r "<spaces>name"}{}
......@@ -1543,6 +1576,27 @@ word sets.
\end{worddef}
% ========== x:stoftos ==========
\begin{worddef*}[StoF]{2175}{S>F}[S to F][x:stoftos]
\item \stack{n}{} \stack[F]{}{r} or \stack{n}{r}
\uline{\param{r} is the floating-point equivalent of the single-cell
value \param{n}. An ambiguous condition exists if \param{n}
can not be precisely represented as a floating-point value.}
\see \uline{\wref{floating:FtoS}{F>S}.}
\begin{implement}
\uline{\word{:} \word{StoF} \word{p} n -{}- r )} \\
\tab \uline{\word{StoD} \word{DtoF}} \\
\uline{\word{;}}
\end{implement}
\end{worddef*}
% ==============================
\begin{worddef}{2200}{SET-PRECISION}
\item \stack{u}{}
......@@ -1607,7 +1661,7 @@ word sets.
% ---------------------------------------------------------
\begin{worddef}{}{SFFIELD:}[s-f-field-colon][X:structures]
\begin{worddef}{2206}[40]{SFFIELD:}[s-f-field-colon][X:structures]
\item \stack{n_1 "<spaces>name"}{n_2}
Skip leading space delimiters. Parse \param{name} delimited by
......@@ -1619,18 +1673,18 @@ word sets.
given below.
\execute[name]
\cbstart\patch{ed11}
\stack{a-addr_{\sout{1}}}{\sout{a}\uline{sf}-addr_{\sout{2}}}
\cbstart\patch{ed12}
\stack{\sout{a-}addr_{\uline{1}}}{\sout{sf-}addr_{\uline{2}}}
\cbend
Add the \param{offset} calculated during the compile time action to
\cbstart\param{a-addr_{\sout{1}}}\cbend\
\cbstart\param{\sout{a-}addr_{\uline{1}}}\cbend\
giving the single-float aligned address
\cbstart\param{\sout{a}\uline{sf}-addr_{\sout{2}}}.\cbend
\cbstart\param{\sout{sf-}addr_{\uline{2}}}.\cbend
\see \wref{facility:+FIELD}{+FIELD},
\wref{facility:BEGIN-STRUCTURE}{BEGIN-STRUCTURE},
\wref{facility:END-STRUCTURE}{END-STRUCTURE}, \linebreak
\wref{facility:BEGIN-STRUCTURE}{BEGIN-STRUCTURE}, \\
\wref{facility:END-STRUCTURE}{END-STRUCTURE},
\rref{facility:FIELD:}{}.
\end{worddef}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment