[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