diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/l3fp.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/l3kernel/l3fp.dtx | 185 |
1 files changed, 126 insertions, 59 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index 1558b86d6f8..b02f20ae962 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%% File: l3fp.dtx Copyright (C) 2011-2017 The LaTeX3 Project +%% File: l3fp.dtx Copyright (C) 2011-2018 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 @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Released 2018/02/21} +% \date{Released 2018/03/05} % % \maketitle % @@ -107,13 +107,17 @@ % \item Dimensions, automatically expressed in points, \emph{e.g.}, % \texttt{pc} is~$12$. % \item Automatic conversion (no need for \cs[no-index]{\meta{type}_use:N}) of -% integer, dimension, and skip variables to floating points, +% integer, dimension, and skip variables to floating point numbers, % expressing dimensions in points and ignoring the stretch and % shrink components of skips. +% \item Tuples: $(x_1,\ldots{},x_n)$ that can be stored in variables, +% added together, multiplied or divided by a floating point number, +% and nested. % \end{itemize} % Floating point numbers can be given either explicitly (in a form such % as |1.234e-34|, or |-.0001|), or as a stored floating point variable, -% which is automatically replaced by its current value. See +% which is automatically replaced by its current value. +% A \enquote{floating point} is a floating point number or a tuple thereof. See % section~\ref{sec:l3fp:fp-floats} for a description of what a floating point is, % section~\ref{sec:l3fp:fp-precedence} for details about how an expression is % parsed, and section~\ref{sec:l3fp:fp-operations} to know what the various @@ -123,7 +127,7 @@ % An example of use could be the following. % \begin{verbatim} % \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} -% = \ExplSyntaxOn \fp_to_decimal:n {sin 3.5 /2 + 2e-3} $. +% = \ExplSyntaxOn \fp_to_decimal:n {sin(3.5)/2 + 2e-3} $. % \end{verbatim} % But in all fairness, this module is mostly meant as an underlying tool % for higher-level commands. For example, one could provide a function @@ -210,6 +214,8 @@ % \end{syntax} % Adds the result of computing the \meta{floating point expression} to % the \meta{fp~var}. +% This also applies if \meta{fp~var} and \meta{floating point +% expression} evaluate to tuples of the same size. % \end{function} % % \begin{function}[updated = 2012-05-08, tested = m3fp002] @@ -219,9 +225,11 @@ % \end{syntax} % Subtracts the result of computing the \meta{floating point % expression} from the \meta{fp~var}. +% This also applies if \meta{fp~var} and \meta{floating point +% expression} evaluate to tuples of the same size. % \end{function} % -% \section{Using floating point numbers} +% \section{Using floating points} % % \begin{function}[EXP, added = 2012-05-08, updated = 2012-07-08, % tested = m3fp-convert003]{\fp_eval:n} @@ -234,7 +242,11 @@ % for the exponent. Non-significant trailing zeros are trimmed, and % integers are expressed without a decimal separator. The values % $\pm\infty$ and \nan{} trigger an \enquote{invalid operation} -% exception. This function is identical to \cs{fp_to_decimal:n}. +% exception. +% For a tuple, each item is converted using \cs{fp_eval:n} and they are combined as +% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)| +% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items. +% This function is identical to \cs{fp_to_decimal:n}. % \end{function} % % \begin{function}[EXP, added = 2012-05-08, updated = 2012-07-08] @@ -250,6 +262,9 @@ % integers are expressed without a decimal separator. The values % $\pm\infty$ and~\nan{} trigger an \enquote{invalid operation} % exception. +% For a tuple, each item is converted using \cs{fp_to_decimal:n} and they are combined as +% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)| +% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items. % \end{function} % % \begin{function}[EXP, updated = 2016-03-22] @@ -265,8 +280,8 @@ % In particular, the result may % be outside the range $[- 2^{14} + 2^{-17}, 2^{14} - 2^{-17}]$ of % valid \TeX{} dimensions, leading to overflow errors if used as a -% dimension. The values $\pm\infty$ and~\nan{} trigger an -% \enquote{invalid operation} exception. +% dimension. Tuples, as well as the values $\pm\infty$ and~\nan{}, +% trigger an \enquote{invalid operation} exception. % \end{function} % % \begin{function}[EXP, updated = 2012-07-08] @@ -280,8 +295,8 @@ % integer. % The result may be outside the range $[- 2^{31} + 1, 2^{31} - 1]$ of % valid \TeX{}~integers, leading to overflow errors if used in an -% integer expression. The values $\pm\infty$ and~\nan{} trigger -% an \enquote{invalid operation} exception. +% integer expression. Tuples, as well as the values $\pm\infty$ +% and~\nan{}, trigger an \enquote{invalid operation} exception. % \end{function} % % \begin{function}[EXP, added = 2012-05-08, updated = 2016-03-22] @@ -299,6 +314,9 @@ % The values $\pm\infty$ and~\nan{} trigger an \enquote{invalid % operation} exception. Normal category codes apply: thus the |e| is % category code~$11$ (a letter). +% For a tuple, each item is converted using \cs{fp_to_scientific:n} and they are combined as +% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)| +% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items. % \end{function} % % \begin{function}[EXP, updated = 2016-03-22] @@ -320,6 +338,9 @@ % |0|, |-0|, \texttt{inf}, \texttt{-inf}, and~\texttt{nan} % respectively. Normal category codes apply and thus \texttt{inf} or % \texttt{nan}, if produced, are made up of letters. +% For a tuple, each item is converted using \cs{fp_to_tl:n} and they are combined as +% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)| +% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items. % \end{function} % % \begin{function}[EXP, updated = 2012-07-08] @@ -332,8 +353,11 @@ % Leading or trailing zeros may be inserted to compensate for the % exponent. Non-significant trailing zeros are trimmed. Integers are % expressed without a decimal separator. The values $\pm\infty$ -% and~\nan{} trigger an \enquote{invalid operation} exception. This -% function is identical to \cs{fp_to_decimal:N}. +% and~\nan{} trigger an \enquote{invalid operation} exception. +% For a tuple, each item is converted using \cs{fp_to_decimal:n} and they are combined as +% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)| +% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items. +% This function is identical to \cs{fp_to_decimal:N}. % \end{function} % % \section{Floating point conditionals} @@ -355,11 +379,11 @@ % \cs{fp_compare:nNnTF} \Arg{fpexpr_1} \meta{relation} \Arg{fpexpr_2} \Arg{true code} \Arg{false code} % \end{syntax} % Compares the \meta{fpexpr_1} and the \meta{fpexpr_2}, and returns -% \texttt{true} if the \meta{relation} is obeyed. Two floating point -% numbers $x$ and~$y$ may obey four mutually exclusive relations: -% $x<y$, $x=y$, $x>y$, or $x$ and~$y$ are not ordered. The latter -% case occurs exactly when one or both operands is~\nan{}, and this relation -% is denoted by the symbol~|?|. Note that a~\nan{} is distinct from +% \texttt{true} if the \meta{relation} is obeyed. Two floating points +% $x$ and~$y$ may obey four mutually exclusive relations: +% $x<y$, $x=y$, $x>y$, or $x?y$ (\enquote{not ordered}). The last +% case occurs exactly if one or both operands is~\nan{} or is a tuple, +% unless they are equal tuples. Note that a~\nan{} is distinct from % any value, even another~\nan{}, hence $x=x$ is not true for % a~\nan{}. To test if a value is~\nan{}, compare it to an arbitrary % number with the \enquote{not ordered} relation. @@ -368,6 +392,10 @@ % { } % <value> is nan % { } % <value> is not nan % \end{verbatim} +% Tuples are equal if they have the same number of items and items +% compare equal (in particular there must be no~\nan{}). +% At present any other comparison with tuples yields |?| (not ordered). +% This is experimental. % \end{function} % % \begin{function}[EXP, pTF, updated = 2012-12-14, @@ -400,10 +428,10 @@ % expression} is evaluated only once. Contrarily to % \cs{int_compare:nTF}, all \meta{floating point expressions} are % computed, even if one comparison is \texttt{false}. Two floating -% point numbers $x$ and~$y$ may obey four mutually exclusive -% relations: $x<y$, $x=y$, $x>y$, or $x$ and~$y$ are not ordered. The -% latter case occurs exactly when one or both operands is~\nan{}, and -% this relation is denoted by the symbol~|?|. Each \meta{relation} +% points $x$ and~$y$ may obey four mutually exclusive +% relations: $x<y$, $x=y$, $x>y$, or $x?y$ (\enquote{not ordered}). +% The last case occurs exactly if one or both operands is~\nan{} or is +% a tuple, unless they are equal tuples. Each \meta{relation} % can be any (non-empty) combination of |<|, |=|, |>|, and~|?|, plus % an optional leading~|!| (which negates the \meta{relation}), with % the restriction that the \meta{relation} may not start with~|?|, as @@ -530,7 +558,8 @@ % \cs{fp_step_function:nnnN} \Arg{initial value} \Arg{step} \Arg{final value} \meta{function} % \end{syntax} % This function first evaluates the \meta{initial value}, \meta{step} -% and \meta{final value}, all of which should be floating point expressions. +% and \meta{final value}, each of which should be a floating point +% expression evaluating to a floating point number, not a tuple. % The \meta{function} is then placed in front of each \meta{value} % from the \meta{initial value} to the \meta{final value} in turn % (using \meta{step} between each \meta{value}). The \meta{step} must @@ -565,7 +594,8 @@ % \cs{fp_step_inline:nnnn} \Arg{initial value} \Arg{step} \Arg{final value} \Arg{code} % \end{syntax} % This function first evaluates the \meta{initial value}, \meta{step} -% and \meta{final value}, all of which should be floating point expressions. +% and \meta{final value}, all of which should be floating point +% expressions evaluating to a floating point number, not a tuple. % Then for each \meta{value} from the \meta{initial value} to the % \meta{final value} in turn (using \meta{step} between each % \meta{value}), the \meta{code} is inserted into the input stream @@ -579,7 +609,8 @@ % ~~\Arg{initial value} \Arg{step} \Arg{final value} \meta{tl~var} \Arg{code} % \end{syntax} % This function first evaluates the \meta{initial value}, \meta{step} -% and \meta{final value}, all of which should be floating point expressions. +% and \meta{final value}, all of which should be floating point +% expressions evaluating to a floating point number, not a tuple. % Then for each \meta{value} from the \meta{initial value} to the % \meta{final value} in turn (using \meta{step} between each % \meta{value}), the \meta{code} is inserted into the input stream, @@ -811,12 +842,13 @@ % \item Logical \texttt{and}, denoted by |&&|. % \item Logical \texttt{or}, denoted by \verb+||+. % \item Ternary operator |?:| (right associative). +% \item Comma (to build tuples). % \end{itemize} % The precedence of operations can be overridden using parentheses. % In particular, those precedences imply that % \begin{align*} -% \mathtt{sin 2pi} & = \sin(2\pi) = 0, \\ -% \mathtt{2\char`\^2max(3,4)} & = 2^{2 \max(3,4)} = 256. +% \mathtt{sin 2pi} & = \sin(2)\pi != 0, \\ +% \mathtt{2\char`\^2max(3,5)} & = 2^2 \max(3,5) = 20. % \end{align*} % Functions are called on the value of their argument, contrarily to % \TeX{} macros. @@ -826,16 +858,21 @@ % We now present the various operations allowed in floating point % expressions, from the lowest precedence to the highest. When used as % a truth value, a floating point expression is \texttt{false} if it is -% $\pm 0$, and \texttt{true} otherwise, including when it is \nan{}. +% $\pm 0$, and \texttt{true} otherwise, including when it is \nan{} or a +% tuple such as $(0,0)$. Tuples are only supported to some extent by +% operations that work with truth values (|?:|, \verb"||", |&&|, |!|), +% by comparisons (|!<=>?|), and by |+|, |-|, |*|, |/|. Unless otherwise +% specified, providing a tuple as an argument of any other operation +% yields the \enquote{invalid operation} exception and a \nan{} result. % % \begin{function}[tested = m3fp-logic002, module = ]{?:} % \begin{syntax} % \cs{fp_eval:n} \{ \meta{operand_1} |?| \meta{operand_2} |:| \meta{operand_3} \} % \end{syntax} % The ternary operator |?:| results in \meta{operand_2} if -% \meta{operand_1} is true, and \meta{operand_3} if it is false (equal to -% $\pm 0$). All three \meta{operands} are evaluated in all cases. The -% operator is right associative, hence +% \meta{operand_1} is true (not $\pm 0$), and \meta{operand_3} if \meta{operand_1} +% is false ($\pm 0$). All three \meta{operands} are evaluated in all +% cases; they may be tuples. The operator is right associative, hence % \begin{verbatim} % \fp_eval:n % { @@ -856,9 +893,12 @@ % \begin{syntax} % \cs{fp_eval:n} \{ \meta{operand_1} \verb"||" \meta{operand_2} \} % \end{syntax} -% If \meta{operand_1} is true (non-zero), use that value, otherwise the +% If \meta{operand_1} is true (not $\pm 0$), use that value, otherwise the % value of \meta{operand_2}. Both \meta{operands} are evaluated in all -% cases. +% cases; they may be tuples. In \meta{operand_1} \verb"||" +% \meta{operand_2} \verb"||" \ldots{} \verb"||" \meta{operands_n}, the +% first true (nonzero) \meta{operand} is used and if all are zero the +% last one ($\pm 0$) is used. % \end{function} % % \begin{function}[tested = m3fp-logic002]{&&} @@ -867,7 +907,10 @@ % \end{syntax} % If \meta{operand_1} is false (equal to~$\pm 0$), use that value, % otherwise the value of \meta{operand_2}. Both \meta{operands} are -% evaluated in all cases. +% evaluated in all cases; they may be tuples. In \meta{operand_1} +% |&&| \meta{operand_2} |&&| \ldots{} |&&| \meta{operands_n}, the +% first false ($\pm 0$) \meta{operand} is used and if none is zero the +% last one is used. % \end{function} % % \begin{function}[tested = m3fp-logic001, updated = 2013-12-14] @@ -885,7 +928,7 @@ % |>|, and~|?|, optionally preceded by~|!|, and may not start % with~|?|. This evaluates to $+1$ if all comparisons % \meta{operand_i} \meta{relation_i} \meta{operand_{i+1}} are true, and -% $+0$ otherwise. All \meta{operands} are evaluated in all cases. +% $+0$ otherwise. All \meta{operands} are evaluated (once) in all cases. % See \cs{fp_compare:nTF} for details. % \end{function} % @@ -897,6 +940,9 @@ % Computes the sum or the difference of its two \meta{operands}. The % \enquote{invalid operation} exception occurs for $\infty-\infty$. % \enquote{Underflow} and \enquote{overflow} occur when appropriate. +% These operations supports the itemwise addition or subtraction of +% two tuples, but if they have a different number of items the +% \enquote{invalid operation} exception occurs and the result is \nan{}. % \end{function} % % \begin{function}[tested = {m3fp-basics002, m3fp-basics003}]{*, /} @@ -909,6 +955,12 @@ % $0/0$, or $0*\infty$. \enquote{Division by zero} occurs when % dividing a finite non-zero number by $\pm 0$. \enquote{Underflow} % and \enquote{overflow} occur when appropriate. +% When \meta{operand_1} is a tuple and \meta{operand_2} is a floating +% point number, each item of \meta{operand_1} is multiplied or divided +% by \meta{operand_2}. Multiplication also supports the case where +% \meta{operand_1} is a floating point number and \meta{operand_2} a +% tuple. Other combinations yield an \enquote{invalid operation} +% exception and a \nan{} result. % \end{function} % % \begin{function}[tested = m3fp-basics004, label = !]{+, -, !} @@ -918,8 +970,9 @@ % \cs{fp_eval:n} \{ |!| \meta{operand} \} % \end{syntax} % The unary |+| does nothing, the unary |-| changes the sign of the -% \meta{operand}, and |!| \meta{operand} evaluates to $1$ if -% \meta{operand} is false and $0$ otherwise (this is the \texttt{not} +% \meta{operand} (for a tuple, of all its components), and +% |!| \meta{operand} evaluates to $1$ if \meta{operand} is false +% (is $\pm 0$) and $0$ otherwise (this is the \texttt{not} % boolean function). Those operations never raise exceptions. % \end{function} % @@ -939,15 +992,16 @@ % the sign cannot be determined. \enquote{Division by zero} occurs % when raising $\pm 0$ to a finite strictly negative power. % \enquote{Underflow} and \enquote{overflow} occur when appropriate. +% If either operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[tested = m3fp-basics004]{abs} % \begin{syntax} % \cs{fp_eval:n} \{ |abs(| \meta{fpexpr} |)| \} % \end{syntax} -% Computes the absolute value of the \meta{fpexpr}. This function -% does not raise any exception beyond those raised when computing its -% operand \meta{fpexpr}. See also \cs{fp_abs:n}. +% Computes the absolute value of the \meta{fpexpr}. If the operand is +% a tuple, \enquote{invalid operation} occurs. This operation does +% not raise exceptions in other cases. See also \cs{fp_abs:n}. % \end{function} % % \begin{function}[tested = m3fp-expo001]{exp} @@ -956,6 +1010,7 @@ % \end{syntax} % Computes the exponential of the \meta{fpexpr}. \enquote{Underflow} % and \enquote{overflow} occur when appropriate. +% If the operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[tested = m3fp-expo001]{ln} @@ -964,10 +1019,11 @@ % \end{syntax} % Computes the natural logarithm of the \meta{fpexpr}. Negative % numbers have no (real) logarithm, hence the \enquote{invalid -% operation} is raised in that case, including for $\ln(-0)$. -% \enquote{Division by zero} occurs when evaluating $\ln(+0) = -% -\infty$. \enquote{Underflow} and \enquote{overflow} occur when -% appropriate. +% operation} is raised in that case, including for $\ln(-0)$. +% \enquote{Division by zero} occurs when evaluating +% $\ln(+0) = -\infty$. \enquote{Underflow} and \enquote{overflow} +% occur when appropriate. If the operand is a tuple, \enquote{invalid +% operation} occurs. % \end{function} % % \begin{function}[tested = m3fp-logic002]{max, min} @@ -976,8 +1032,9 @@ % \cs{fp_eval:n} \{ |min(| \meta{fpexpr_1} |,| \meta{fpexpr_2} |,| \ldots{} |)| \} % \end{syntax} % Evaluates each \meta{fpexpr} and computes the largest (smallest) of -% those. If any of the \meta{fpexpr} is a \nan{}, the result is -% \nan{}. Those operations do not raise exceptions. +% those. If any of the \meta{fpexpr} is a \nan{} or tuple, the result +% is \nan{}. If any operand is a tuple, \enquote{invalid operation} +% occurs; these operations do not raise exceptions in other cases. % \end{function} % % \begin{function} @@ -1018,6 +1075,7 @@ % \end{itemize} % \enquote{Overflow} occurs if $x$~is finite and the result is % infinite (this can only happen if $\meta{fpexpr_2}\string<-9984$). +% If any operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[tested = m3fp-logic002]{sign} @@ -1026,8 +1084,9 @@ % \end{syntax} % Evaluates the \meta{fpexpr} and determines its sign: $+1$ for % positive numbers and for $+\infty$, $-1$ for negative numbers and -% for $-\infty$, $\pm 0$ for $\pm 0$, and \nan{} for \nan{}. This -% operation does not raise exceptions. +% for $-\infty$, $\pm 0$ for $\pm 0$, and \nan{} for \nan{}. +% If the operand is a tuple, \enquote{invalid operation} occurs. +% This operation does not raise exceptions in other cases. % \end{function} % % \begin{function}[updated = 2013-11-17, tested = m3fp-trig001] @@ -1051,6 +1110,7 @@ % cotangent, cosecant, or secant at one of their poles leads to a % \enquote{division by zero} exception. \enquote{Underflow} and % \enquote{overflow} occur when appropriate. +% If the operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[added = 2013-11-02, tested = m3fp-trig003] @@ -1074,6 +1134,7 @@ % cotangent, cosecant, or secant at one of their poles leads to a % \enquote{division by zero} exception. \enquote{Underflow} and % \enquote{overflow} occur when appropriate. +% If the operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[added = 2013-11-02, tested = m3fp-trig002] @@ -1093,6 +1154,7 @@ % inside the range $(-1,1)$, an \enquote{invalid operation} exception % is raised. \enquote{Underflow} and \enquote{overflow} occur when % appropriate. +% If the operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[added = 2013-11-02, tested = m3fp-trig004] @@ -1112,6 +1174,7 @@ % inside the range $(-1,1)$, an \enquote{invalid operation} exception % is raised. \enquote{Underflow} and \enquote{overflow} occur when % appropriate. +% If the operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[added = 2013-11-02, tested = m3fp-trig002] @@ -1140,7 +1203,8 @@ % need not be defined for the two-argument arctangent: when both % expressions yield~$\pm 0$, or when both yield~$\pm\infty$, the % resulting angle is one of $\{\pm\pi/4,\pm 3\pi/4\}$ depending on -% signs. Only the \enquote{underflow} exception can occur. +% signs. The \enquote{underflow} exception can occur. +% If any operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[added = 2013-11-02, tested = m3fp-trig004] @@ -1168,8 +1232,9 @@ % The ratio $\meta{fpexpr_1}/\meta{fpexpr_2}$ need not be defined for % the two-argument arctangent: when both expressions yield~$\pm 0$, or % when both yield~$\pm\infty$, the resulting angle is one of $\{\pm -% 45,\pm 135\}$ depending on signs. Only the \enquote{underflow} +% 45,\pm 135\}$ depending on signs. The \enquote{underflow} % exception can occur. +% If any operand is a tuple, \enquote{invalid operation} occurs. % \end{function} % % \begin{function}[added = 2013-12-14, tested = m3fp-basics005]{sqrt} @@ -1177,7 +1242,7 @@ % \cs{fp_eval:n} \{ |sqrt(| \meta{fpexpr} |)| \} % \end{syntax} % Computes the square root of the \meta{fpexpr}. The \enquote{invalid -% operation} is raised when the \meta{fpexpr} is negative; no other +% operation} is raised when the \meta{fpexpr} is negative or is a tuple; no other % exception can occur. Special values yield $\sqrt{-0} = -0$, % $\sqrt{+0} = +0$, $\sqrt{+\infty} = +\infty$ and % $\sqrt{\text{\nan{}}}=\text{\nan{}}$. @@ -1272,9 +1337,9 @@ % \end{syntax} % Evaluates the \meta{floating point expression} as described for % \cs{fp_eval:n} and leaves the absolute value of the result in the -% input stream. This function does not raise any exception beyond -% those raised when evaluating its argument. Within floating point -% expressions, |abs()| can be used. +% input stream. If the argument is a tuple, \enquote{invalid +% operation} occurs, but no other case raises exceptions. Within +% floating point expressions, |abs()| can be used. % \end{function} % % \begin{function}[EXP, added = 2012-09-26, tested = m3fp-convert003] @@ -1283,10 +1348,11 @@ % \cs{fp_max:nn} \Arg{fp expression 1} \Arg{fp expression 2} % \end{syntax} % Evaluates the \meta{floating point expressions} as described for -% \cs{fp_eval:n} and leaves the resulting larger (\texttt{max}) or smaller -% (\texttt{min}) value in the input stream. This function does not raise any -% exception beyond those raised when evaluating its argument. Within -% floating point expressions, |max()| and |min()| can be used. +% \cs{fp_eval:n} and leaves the resulting larger (\texttt{max}) or +% smaller (\texttt{min}) value in the input stream. If the argument +% is a tuple, \enquote{invalid operation} occurs, but no other case +% raises exceptions. Within floating point expressions, |max()| and +% |min()| can be used. % \end{function} % % \section{Disclaimer and roadmap} @@ -1297,6 +1363,7 @@ % % The following need to be done. I'll try to time-order the items. % \begin{itemize} +% \item Function to count items in a tuple (and to determine if something is a tuple). % \item Decide what exponent range to consider. % \item Support signalling \texttt{nan}. % \item Modulo and remainder, and rounding functions |quantize|, @@ -1326,7 +1393,7 @@ % \pkg{Pgfmath} also provides box-measurements (depth, height, width), but % boxes are not possible expandably. % -% Bugs. +% Bugs, and tests to add. % \begin{itemize} % \item Check that functions are monotonic when they should. % \item Add exceptions to |?:|, |!<=>?|, |&&|, \verb"||", and |!|. |