% \iffalse meta-comment
%
%% File: xfp.dtx (C) Copyright 2017 The LaTeX3 Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
% license or (at your option) any later version.  The latest version
% of this license is in the file
%
%    http://www.latex-project.org/lppl.txt
%
% This file is part of the "l3packages bundle" (The Work in LPPL)
% and all files in that bundle must be distributed together.
%
% -----------------------------------------------------------------------
%
% The development version of the bundle can be found at
%
%    https://github.com/latex3/latex3
%
% for those people who are interested.
%
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
\RequirePackage{expl3}[2017/09/18]
%<package>\@ifpackagelater{expl3}{2017/09/18}
%<package>  {}
%<package>  {%
%<package>    \PackageError{xfp}{Support package l3kernel too old}
%<package>      {%
%<package>        Please install an up to date version of l3kernel\MessageBreak
%<package>        using your TeX package manager or from CTAN.\MessageBreak
%<package>        \MessageBreak
%<package>        Loading xfp will abort!%
%<package>      }%
%<package>    \endinput
%<package>  }
%<package>\RequirePackage{xparse}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
\usepackage{amstext}
\begin{document}
  \DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \providecommand\nan{\texttt{NaN}}
%
% \title{^^A
%   The \textsf{xfp} package\\Floating Point Unit^^A
% }
%
% \author{^^A
%  The \LaTeX3 Project\thanks
%    {^^A
%      E-mail:
%        \href{mailto:latex-team@latex-project.org}
%          {latex-team@latex-project.org}^^A
%    }^^A
% }
%
% \date{Released 2017/09/18}
%
% \maketitle
%
% \begin{documentation}
%
% This package provides a \LaTeXe{} document-level interface to the \LaTeX{}3
% floating point unit (part of \pkg{expl3}). It also provides a parallel
% integer expression interface for convenience.
% 
% \begin{function}[EXP]{\fpeval}
%   The expandable command \cs{fpeval} takes as it's argument a floating
%   point expression and will produce a result using the normal rules of
%   mathematics. As this command is expandable it can be used where \TeX{}
%   requires a number and for example within a low-level \cs{edef} operation
%   to give a purely numerical result.
% \end{function}
% 
% Briefly, the floating point expressions may comprise:
% \begin{itemize}
%   \item Basic arithmetic: addition $x+y$, subtraction $x-y$,
%     multiplication $x*y$, division $x/y$, square root~$\sqrt{x}$,
%     and parentheses.
%   \item Comparison operators: $x\mathop{\mathtt{<}}y$,
%     $x\mathop{\mathtt{<=}}y$, $x\mathop{\mathtt{>?}}y$,
%     $x\mathop{\mathtt{!=}}y$ \emph{etc.}
%   \item Boolean logic: sign $\operatorname{sign} x$,
%     negation $\mathop{!}x$, conjunction
%     $x\mathop{\&\&}y$, disjunction $x\mathop{\vert\vert}y$, ternary
%     operator $x\mathop{?}y\mathop{:}z$.
%   \item Exponentials: $\exp x$, $\ln x$, $x^y$.
%   \item Trigonometry: $\sin x$, $\cos x$, $\tan x$, $\cot x$, $\sec
%     x$, $\csc x$ expecting their arguments in radians, and
%     $\operatorname{sind} x$, $\operatorname{cosd} x$,
%     $\operatorname{tand} x$, $\operatorname{cotd} x$,
%     $\operatorname{secd} x$, $\operatorname{cscd} x$ expecting their
%     arguments in degrees.
%   \item Inverse trigonometric functions: $\operatorname{asin} x$,
%     $\operatorname{acos} x$, $\operatorname{atan} x$,
%     $\operatorname{acot} x$, $\operatorname{asec} x$,
%     $\operatorname{acsc} x$ giving a result in radians, and
%     $\operatorname{asind} x$, $\operatorname{acosd} x$,
%     $\operatorname{atand} x$, $\operatorname{acotd} x$,
%     $\operatorname{asecd} x$, $\operatorname{acscd} x$ giving a result
%     in degrees.
%   \item Extrema: $\max(x,y,\ldots)$, $\min(x,y,\ldots)$,
%     $\operatorname{abs}(x)$.
%   \item Rounding functions ($n=0$ by default, $t=\nan$ by default):
%     $\operatorname{trunc}(x,n)$ rounds towards zero,
%     $\operatorname{floor}(x,n)$ rounds towards~$-\infty$,
%     $\operatorname{ceil}(x,n)$ rounds towards~$+\infty$,
%     $\operatorname{round}(x,n,t)$ rounds to the closest value, with
%     ties rounded to an even value by default, towards zero if $t=0$,
%     towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$.
%   \item Random numbers: $\mathop{rand}()$, $\mathop{randint}(m,n)$ (requires
%     \pdfTeX{} or \LuaTeX{}).
%   \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians).
%   \item Dimensions, automatically expressed in points, \emph{e.g.},
%     \texttt{pc} is~$12$.
%   \item Automatic conversion (no need for \cs{number}) of
%     integer, dimension, and skip variables to floating points,
%     expressing dimensions in points and ignoring the stretch and
%     shrink components of skips.
% \end{itemize}
%
% An example of use could be the following.
% \begin{verbatim}
%   \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
%   = \fpeval{sin(3.5)/2 + 2e-3} $.
% \end{verbatim}
%
% \begin{function}[EXP]{\inteval}
%   The expandable command \cs{inteval} takes as its argument an integer
%   expression and produces a result using the normal rules of
%   mathematics. The operations recognised are |+|, |-|, |*| and |/| plus
%   parentheses. Division occurs with \emph{rounding}, and ties are rounded
%   away from zero. As this command is
%   expandable it can be used where \TeX{} requires a number and for example
%   within a low-level \cs{edef} operation to give a purely numerical result.
% \end{function}
%
% An example of use could be the following.
% \begin{verbatim}
%   \LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.
% \end{verbatim}
%
% \end{documentation}
%
% \begin{implementation}
%
% \section{\pkg{xfp} implementation}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
%    \begin{macrocode}
\ProvidesExplPackage{xfp}{2017/09/18}{}
  {L3 Floating point unit}
%    \end{macrocode}
%
% \begin{macro}{\fpeval}
%   A document level wrapper around the code level function.
%    \begin{macrocode}
\NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\inteval}
%   A second one, this time around an \eTeX{} primitive.
%    \begin{macrocode}
\NewExpandableDocumentCommand \inteval { m } { \int_eval:n {#1} }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
% \end{implementation}
%
% \PrintIndex
