[latex3-commits] [l3svn] r6987 - Add "sign" function to l3fp
noreply at latex-project.org
noreply at latex-project.org
Sat Mar 11 02:06:52 CET 2017
Author: bruno
Date: 2017-03-11 02:06:52 +0100 (Sat, 11 Mar 2017)
New Revision: 6987
Modified:
trunk/l3kernel/l3fp-logic.dtx
trunk/l3kernel/l3fp-parse.dtx
trunk/l3kernel/l3fp.dtx
trunk/l3kernel/testfiles/m3expl001.luatex.tlg
trunk/l3kernel/testfiles/m3expl001.ptex.tlg
trunk/l3kernel/testfiles/m3expl001.tlg
trunk/l3kernel/testfiles/m3expl001.uptex.tlg
trunk/l3kernel/testfiles/m3expl001.xetex.tlg
trunk/l3kernel/testfiles/m3expl003.luatex.tlg
trunk/l3kernel/testfiles/m3expl003.ptex.tlg
trunk/l3kernel/testfiles/m3expl003.tlg
trunk/l3kernel/testfiles/m3expl003.uptex.tlg
trunk/l3kernel/testfiles/m3expl003.xetex.tlg
trunk/l3kernel/testfiles/m3fp-logic002.lvt
trunk/l3kernel/testfiles/m3fp-logic002.tlg
trunk/l3packages/xfp/xfp.dtx
Log:
Add "sign" function to l3fp
Modified: trunk/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/l3kernel/l3fp-logic.dtx 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/l3fp-logic.dtx 2017-03-11 01:06:52 UTC (rev 6987)
@@ -480,6 +480,26 @@
%
% \subsection{Boolean operations}
%
+% \begin{macro}[int, EXP]{\@@_sign_o:w}
+% \begin{macro}[aux, EXP]{\@@_sign_aux_o:w}
+% Find the sign of the floating point: \texttt{nan}, |+0|, |-0|, |+1| or |-1|.
+% \begin{macrocode}
+\cs_new:Npn \@@_sign_o:w ? \s_@@ \@@_chk:w #1#2; @
+ {
+ \if_case:w #1 \exp_stop_f:
+ \@@_case_return_same_o:w
+ \or: \exp_after:wN \@@_sign_aux_o:w
+ \or: \exp_after:wN \@@_sign_aux_o:w
+ \else: \@@_case_return_same_o:w
+ \fi:
+ \s_@@ \@@_chk:w #1 #2;
+ }
+\cs_new:Npn \@@_sign_aux_o:w \s_@@ \@@_chk:w #1 #2 #3 ;
+ { \@@_exp_after_o:w \s_@@ \@@_chk:w 1#2{1}{1000}{0000}{0000}{0000}; }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}[int, EXP]{\@@_not_o:w}
% Return \texttt{true} or \texttt{false}, with two expansions, one to
% exit the conditional, and one to please \pkg{l3fp-parse}. The first
Modified: trunk/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/l3kernel/l3fp-parse.dtx 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/l3fp-parse.dtx 2017-03-11 01:06:52 UTC (rev 6987)
@@ -2040,7 +2040,8 @@
% \@@_parse_word_abs:N ,
% \@@_parse_word_exp:N ,
% \@@_parse_word_ln:N ,
-% \@@_parse_word_sqrt:N ,
+% \@@_parse_word_sign:N ,
+% \@@_parse_word_sqrt:N ,
% }
% Unary functions.
% \begin{macrocode}
@@ -2050,6 +2051,8 @@
{ \@@_parse_unary_function:nNN {exp} ? }
\cs_new:Npn \@@_parse_word_ln:N
{ \@@_parse_unary_function:nNN {ln} ? }
+\cs_new:Npn \@@_parse_word_sign:N
+ { \@@_parse_unary_function:nNN {sign} ? }
\cs_new:Npn \@@_parse_word_sqrt:N
{ \@@_parse_unary_function:nNN {sqrt} ? }
% \end{macrocode}
Modified: trunk/l3kernel/l3fp.dtx
===================================================================
--- trunk/l3kernel/l3fp.dtx 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/l3fp.dtx 2017-03-11 01:06:52 UTC (rev 6987)
@@ -74,7 +74,8 @@
% \item Comparison operators: $x\mathop{\mathtt{<}}y$,
% $x\mathop{\mathtt{<=}}y$, $x\mathop{\mathtt{>?}}y$,
% $x\mathop{\mathtt{!=}}y$ \emph{etc.}
-% \item Boolean logic: negation $\mathop{!}x$, conjunction
+% \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$.
@@ -1015,6 +1016,16 @@
% infinite (this can only happen if $\meta{fpexpr_2}\string<-9984$).
% \end{function}
%
+% \begin{function}[tested = m3fp-logic002]{sign}
+% \begin{syntax}
+% \cs{fp_eval:n} \{ |sign(| \meta{fpexpr} |)| \}
+% \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.
+% \end{function}
+%
% \begin{function}[updated = 2013-11-17, tested = m3fp-trig001]
% {sin, cos, tan, cot, csc, sec}
% \begin{syntax}
Modified: trunk/l3kernel/testfiles/m3expl001.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.luatex.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl001.luatex.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3722,6 +3722,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3854,6 +3855,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl001.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.ptex.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl001.ptex.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3710,6 +3710,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3842,6 +3843,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl001.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl001.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3710,6 +3710,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3842,6 +3843,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl001.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.uptex.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl001.uptex.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3710,6 +3710,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3842,6 +3843,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl001.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.xetex.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl001.xetex.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3720,6 +3720,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3852,6 +3853,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.luatex.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl003.luatex.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3723,6 +3723,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3855,6 +3856,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.ptex.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl003.ptex.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3711,6 +3711,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3843,6 +3844,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl003.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3711,6 +3711,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3843,6 +3844,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.uptex.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl003.uptex.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3711,6 +3711,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3843,6 +3844,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.xetex.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3expl003.xetex.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -3721,6 +3721,7 @@
Defining \__fp_parse_word_abs:N on line ...
Defining \__fp_parse_word_exp:N on line ...
Defining \__fp_parse_word_ln:N on line ...
+Defining \__fp_parse_word_sign:N on line ...
Defining \__fp_parse_word_sqrt:N on line ...
Defining \__fp_parse_word_acos:N on line ...
Defining \__fp_parse_word_acosd:N on line ...
@@ -3853,6 +3854,8 @@
Defining \__fp_minmax_auxi:ww on line ...
Defining \__fp_minmax_auxii:ww on line ...
Defining \__fp_minmax_break_o:w on line ...
+Defining \__fp_sign_o:w on line ...
+Defining \__fp_sign_aux_o:w on line ...
Defining \__fp_not_o:w on line ...
Defining \__fp_&_o:ww on line ...
Defining \__fp_|_o:ww on line ...
Modified: trunk/l3kernel/testfiles/m3fp-logic002.lvt
===================================================================
--- trunk/l3kernel/testfiles/m3fp-logic002.lvt 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3fp-logic002.lvt 2017-03-11 01:06:52 UTC (rev 6987)
@@ -204,4 +204,16 @@
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\TESTEXP { Sign }
+ {
+ \fp_to_tl:n { sign(0) } \NEWLINE
+ \fp_to_tl:n { sign(-0) } \NEWLINE
+ \fp_to_tl:n { sign(1.2) } \NEWLINE
+ \fp_to_tl:n { sign(-987e-3) } \NEWLINE
+ \fp_to_tl:n { sign(-inf) } \NEWLINE
+ \fp_to_tl:n { sign(+inf) } \NEWLINE
+ \fp_to_tl:n { sign(nan) } \NEWLINE
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\END
Modified: trunk/l3kernel/testfiles/m3fp-logic002.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3fp-logic002.tlg 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3kernel/testfiles/m3fp-logic002.tlg 2017-03-11 01:06:52 UTC (rev 6987)
@@ -285,3 +285,14 @@
0
1
============================================================
+============================================================
+TEST 13: Sign
+============================================================
+0
+-0
+1
+-1
+-1
+1
+nan
+============================================================
Modified: trunk/l3packages/xfp/xfp.dtx
===================================================================
--- trunk/l3packages/xfp/xfp.dtx 2017-03-10 23:02:55 UTC (rev 6986)
+++ trunk/l3packages/xfp/xfp.dtx 2017-03-11 01:06:52 UTC (rev 6987)
@@ -93,7 +93,8 @@
% \item Comparison operators: $x\mathop{\mathtt{<}}y$,
% $x\mathop{\mathtt{<=}}y$, $x\mathop{\mathtt{>?}}y$,
% $x\mathop{\mathtt{!=}}y$ \emph{etc.}
-% \item Boolean logic: negation $\mathop{!}x$, conjunction
+% \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$.
More information about the latex3-commits
mailing list