summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint/xinttrig.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-02-01 22:09:55 +0000
committerKarl Berry <karl@freefriends.org>2020-02-01 22:09:55 +0000
commit3cac8298f5b8b21ddd1aecbea42a135a9c5e4cb8 (patch)
tree9920a659b7ad3860aeb7f391e499b7ccf7f886f8 /Master/texmf-dist/tex/generic/xint/xinttrig.sty
parent22cb4622b403ec9e42484b7af858243a417e2d12 (diff)
xint (1feb20)
git-svn-id: svn://tug.org/texlive/trunk@53622 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xinttrig.sty')
-rw-r--r--Master/texmf-dist/tex/generic/xint/xinttrig.sty353
1 files changed, 219 insertions, 134 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xinttrig.sty b/Master/texmf-dist/tex/generic/xint/xinttrig.sty
index c25ebaeb452..a8ab5b69ad2 100644
--- a/Master/texmf-dist/tex/generic/xint/xinttrig.sty
+++ b/Master/texmf-dist/tex/generic/xint/xinttrig.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xinttrig: Trigonometry for the xintexpr package
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -68,10 +68,10 @@
\expandafter\xint_secondoftwo
\fi
{\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver@trig\endcsname{2019/09/10 v1.3f}%
+{\expandafter\gdef\csname xintlibver@trig\endcsname{2020/01/31 v1.4}%
\XINT_providespackage
\ProvidesPackage{xinttrig}%
-[2019/09/10 v1.3f Trigonometrical functions for xintexpr (JFB)]%
+[2020/01/31 v1.4 Trigonometrical functions for xintexpr (JFB)]%
}%
\xintFor* #1 in {iDTVtuwxyzX}\do{\xintensuredummy{#1}}%
\def\xintreloadxinttrig
@@ -92,8 +92,10 @@
\xintdeffloatvar oneRadian := 0 +
57.2957795130823208767981548141051703324054724665643215491602;% 180/Pi
\xintdeffloatvar invfact\xintListWithSep{, invfact}{\xintSeq{2}{44}}%
- := seq(0+x, x=\xintexpr rseq(1/2{;}@/i, i=3..44)\relax);% need to hide inner ;
-\xintdeffloatefunc sin_aux(X) := 1 - X(invfact3 - X(invfact5
+ := \xintfloatexpr [\XINTdigits] % force float rounding after exact evaluations
+ \xintexpr rseq(1/2{;}@/i, i=3..44)\relax % need to hide inner ; from \xintdeffloatvar
+ \relax;%
+\xintdeffloatfunc sin_aux(X) := 1 - X(invfact3 - X(invfact5
\ifnum\XINTdigits>4
- X(invfact7
\ifnum\XINTdigits>6
@@ -133,7 +135,7 @@
\ifnum\XINTdigits>59
- X(invfact43
)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi));%
-\xintdeffloatefunc cos_aux(X) := 1 - X(invfact2 - X(invfact4
+\xintdeffloatfunc cos_aux(X) := 1 - X(invfact2 - X(invfact4
\ifnum\XINTdigits>3
- X(invfact6
\ifnum\XINTdigits>5
@@ -179,8 +181,8 @@
\csname XINT_flexpr_func_sin_aux\endcsname
\expandafter\let\csname XINT_expr_func_cos_aux\expandafter\endcsname
\csname XINT_flexpr_func_cos_aux\endcsname
-\xintdeffloatefunc sin_(x) := x * sin_aux(sqr(x));%
-\xintdeffloatefunc cos_(x) := cos_aux(sqr(x));%
+\xintdeffloatfunc sin_(x) := x * sin_aux(sqr(x));%
+\xintdeffloatfunc cos_(x) := cos_aux(sqr(x));%
\def\XINT_mod_ccclx_i #1.% input <k>.<N>. k is a non-negative exponent
{%
\expandafter\XINT_mod_ccclx_e\the\numexpr
@@ -200,9 +202,10 @@
\def\XINT_mod_ccclx_z#1.#2.{#2-360*#1.}%
\def\XINT_flexpr_func_sind_ #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintSind{\XINT_expr_unlock#3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one{\romannumeral`&&@\xintSind#3}}%
}%
+\def\XINT_expr_unlock{\expandafter\xint_firstofone\romannumeral`&&@}%
\def\xintSind#1{\romannumeral`&&@\expandafter\xintsind
\romannumeral0\XINTinfloatS[\XINTdigits]{#1}}%
\def\xintsind #1[#2#3]%
@@ -235,8 +238,8 @@
\def\XINT_sind_A#1{%
\def\XINT_sind_A##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_sind_A\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -244,13 +247,13 @@
\def\XINT_tmpa#1{%
\def\XINT_sind_B_n-##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_sind_B_p##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -258,13 +261,13 @@
\def\XINT_tmpa#1{%
\def\XINT_sind_C_n-##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_sind_C_p##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -272,31 +275,31 @@
\def\XINT_tmpa#1{%
\def\XINT_sind_D_n-##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_sind_D_p##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
\def\XINT_sind_E#1{%
\def\XINT_sind_E-##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
}\expandafter
\XINT_sind_E\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
\def\XINT_flexpr_func_cosd_ #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintCosd{\XINT_expr_unlock#3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one{\romannumeral`&&@\xintCosd#3}}%
}%
\def\xintCosd#1{\romannumeral`&&@\expandafter\xintcosd
- \romannumeral0\XINTinfloatS[\XINTdigits]{#1}}%
+ \romannumeral0\XINTinfloatS[\XINTdigits]{#1}}%
\def\xintcosd #1[#2#3]%
{%
\xint_UDsignfork
@@ -327,8 +330,8 @@
\def\XINT_cosd_A#1{%
\def\XINT_cosd_A##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_cosd_A\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -336,13 +339,13 @@
\def\XINT_tmpa#1{%
\def\XINT_cosd_B_n-##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_cosd_B_p##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -350,13 +353,13 @@
\def\XINT_tmpa#1{%
\def\XINT_cosd_C_n-##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_cosd_C_p##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -364,54 +367,88 @@
\def\XINT_tmpa#1{%
\def\XINT_cosd_D_n-##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_cosd_D_p##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
\def\XINT_cosd_E#1{%
\def\XINT_cosd_E-##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
}\expandafter
\XINT_cosd_E\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
-\xintdeffloatefunc sind(x) := ifsgn(x, if(x>=-45, sin_(x*oneDegree), -sind_(-x)),
- 0,
- if(x<=45, sin_(x*oneDegree), sind_(x)));%
-\xintdeffloatefunc cosd(x) := ifsgn(x, if(x>=-45, cos_(x*oneDegree), cosd_(-x)),
- 1,
- if(x<=45, cos_(x*oneDegree), cosd_(x)));%
-\xintdeffloatefunc sin(x):= if(abs(x)<0.79, sin_(x),%
- ifsgn(x, -sind_(-x*oneRadian),
- 0,
- sind_(x*oneRadian))
- );%
-\xintdeffloatefunc cos(x):= if(abs(x)<0.79, cos_(x), cosd_(abs(x*oneRadian)));%
-\xintdeffloatefunc sinc(x):=
- if(abs(x)<0.79, sin_aux(sqr(x)), sind_(abs(x)*oneRadian)/abs(x));%
-\xintdeffloatefunc tand(x):= sind(x)/cosd(x);%
-\xintdeffloatefunc cotd(x):= cosd(x)/sind(x);%
-\xintdeffloatefunc tan(x) := ifsgn(x, if(x>-0.79, sin(x)/cos(x), -cotd(90+x*oneRadian)),
- 0,
- if(x<0.79, sin(x)/cos(x), cotd(90-x*oneRadian))
- );%
-\xintdeffloatefunc cot(x) := if(abs(x)<0.79, cos(x)/sin(x),
- ifsgn(x, -tand(90+x*oneRadian),
- 0,
- tand(90-x*oneRadian))
- );%
-\xintdeffloatefunc sec(x) := inv(cos(x));%
-\xintdeffloatefunc csc(x) := inv(sin(x));%
-\xintdeffloatefunc secd(x):= inv(cosd(x));%
-\xintdeffloatefunc cscd(x):= inv(sind(x));%
-\xintdeffloatefunc asin_aux(X) := 1
+\xintdeffloatfunc sind(x) := (x)??
+ {(x>=-45)?
+ {sin_(x*oneDegree)}
+ {-sind_(-x)}
+ }
+ {0}
+ {(x<=45)?
+ {sin_(x*oneDegree)}
+ {sind_(x)}
+ }
+ ;%
+\xintdeffloatfunc cosd(x) := (x)??
+ {(x>=-45)?
+ {cos_(x*oneDegree)}
+ {cosd_(-x)}
+ }
+ {1}
+ {(x<=45)?
+ {cos_(x*oneDegree)}
+ {cosd_(x)}
+ }
+ ;%
+\xintdeffloatfunc sin(x):= (abs(x)<0.79)?
+ {sin_(x)}
+ {(x)??
+ {-sind_(-x*oneRadian)}
+ {0}
+ {sind_(x*oneRadian)}
+ }
+ ;%
+\xintdeffloatfunc cos(x):= (abs(x)<0.79)?
+ {cos_(x)}
+ {cosd_(abs(x*oneRadian))}
+ ;%
+\xintdeffloatfunc sinc(x):= (abs(x)<0.79) ?
+ {sin_aux(sqr(x))}
+ {sind_(abs(x)*oneRadian)/abs(x)}
+ ;%
+\xintdeffloatfunc tand(x):= sind(x)/cosd(x);%
+\xintdeffloatfunc cotd(x):= cosd(x)/sind(x);%
+\xintdeffloatfunc tan(x) := (x)??
+ {(x>-0.79)?
+ {sin(x)/cos(x)}
+ {-cotd(90+x*oneRadian)
+ }
+ }
+ {0}
+ {(x<0.79)?
+ {sin(x)/cos(x)}
+ {cotd(90-x*oneRadian)}
+ }
+ ;%
+\xintdeffloatfunc cot(x) := (abs(x)<0.79)?
+ {cos(x)/sin(x)}
+ {(x)??
+ {-tand(90+x*oneRadian)}
+ {0}
+ {tand(90-x*oneRadian)}
+ };%
+\xintdeffloatfunc sec(x) := inv(cos(x));%
+\xintdeffloatfunc csc(x) := inv(sin(x));%
+\xintdeffloatfunc secd(x):= inv(cosd(x));%
+\xintdeffloatfunc cscd(x):= inv(sind(x));%
+\xintdeffloatfunc asin_aux(X) := 1
\ifnum\XINTdigits>3 % actually 4 would achieve 1ulp in place of <0.5ulp
+ X(1/6
\ifnum\XINTdigits>9
@@ -425,57 +462,105 @@
\ifnum\XINTdigits>46
+ X(231/13312
)\fi)\fi)\fi)\fi)\fi)\fi;%
-\xintdeffloatefunc asin_o(D, T) := T + D*asin_aux(sqr(D));%
-\xintdeffloatefunc asin_n(V, T, t, u) :=% V is square of T
+\xintdeffloatfunc asin_o(D, T) := T + D*asin_aux(sqr(D));%
+\xintdeffloatfunc asin_n(V, T, t, u) :=% V is square of T
asin_o (\xintexpr t*cos_aux(V) - u*T*sin_aux(V)\relax, T);%
-\xintdeffloatefunc asin_m(T, t, u) := asin_n(sqr(T), T, t, u);%
-\xintdeffloatefunc asin_l(t, u) := asin_m(t*asin_aux(sqr(t)), t, u);%
-\xintdeffloatefunc asin_a(t, u) :=
- if(t<u, asin_l(t, u), Piover2 - asin_l(u, t));%
-\xintdeffloatefunc asind_a(t, u):=
- if(t<u, asin_l(t, u) * oneRadian, 90 - asin_l(u, t) * oneRadian);%
-\xintdeffloatefunc asin(t) := ifsgn(t, -asin_a(-t, sqrt(1-sqr(t))),
- 0,
- asin_a(t, sqrt(1-sqr(t))));%
-\xintdeffloatefunc asind(t) := ifsgn(t, -asind_a(-t, sqrt(1-sqr(t))),
- 0,
- asind_a(t, sqrt(1-sqr(t))));%
-\xintdeffloatefunc acos(t) := Piover2 - asin(t);%
-\xintdeffloatefunc acosd(t):= 90 - asind(t);%
-\xintdeffloatefunc atan_b(t, w, z):=%
- 0.5 * if(w< 0, Pi - asin_a(2z * t, -w*z), asin_a(2z * t, w*z));%
-\xintdeffloatefunc atan_a(t, T) := atan_b(t, 1-T, inv(1+T));%
-\xintdeffloatefunc atan(t):= ifsgn(t,-atan_a(-t, sqr(t)), 0, atan_a(t, sqr(t)));%
-\xintdeffloatefunc atand_b(t, w, z) :=
- 0.5 * if(w< 0, 180 - asind_a(2z * t, -w*z), asind_a(2z * t, w*z));%
-\xintdeffloatefunc atand_a(t, T) := atand_b(t, 1-T, inv(1+T));%
-\xintdeffloatefunc atand(t):= ifsgn(t,-atand_a(-t, sqr(t)), 0, atand_a(t, sqr(t)));%
-\xintdeffloatefunc Arg(x, y):=
- if(y>x,
- if(y>-x, Piover2 - atan(x/y),
- if(y<0, -Pi + atan(y/x), Pi + atan(y/x))),
- if(y>-x, atan(y/x), -Piover2 + atan(x/-y))
- );%
-\xintdeffloatefunc atan2(y,x) := Arg(x, y);%
-\xintdeffloatefunc Argd(x, y):=
- if(y>x,
- if(y>-x, 90 - atand(x/y),
- if(y<0, -180 + atand(y/x), 180 + atand(y/x))),
- if(y>-x, atand(y/x), -90 + atand(x/-y))
- );%
-\xintdeffloatefunc atan2d(y,x) := Argd(x, y);%
-\xintdeffloatefunc pArg(x, y):=
- if(y>x,
- if(y>-x, Piover2 - atan(x/y), Pi + atan(y/x)),
- if(y>-x, if(y<0, twoPi + atan(y/x), atan(y/x)),
- threePiover2 + atan(x/-y))
- );%
-\xintdeffloatefunc pArgd(x, y):=
- if(y>x,
- if(y>-x, 90 - atan(x/y)*oneRadian, 180 + atan(y/x)*oneRadian),
- if(y>-x, if(y<0, 360 + atan(y/x)*oneRadian, atan(y/x)*oneRadian),
- 270 + atan(x/-y)*oneRadian)
- );%
+\xintdeffloatfunc asin_m(T, t, u) := asin_n(sqr(T), T, t, u);%
+\xintdeffloatfunc asin_l(t, u) := asin_m(t*asin_aux(sqr(t)), t, u);%
+\xintdeffloatfunc asin_a(t, u) := (t<u)?
+ {asin_l(t, u)}
+ {Piover2 - asin_l(u, t)}
+ ;%
+\xintdeffloatfunc asind_a(t, u):= (t<u)?
+ {asin_l(t, u) * oneRadian}
+ {90 - asin_l(u, t) * oneRadian}
+ ;%
+\xintdeffloatfunc asin(t) := (t)??
+ {-asin_a(-t, sqrt_(1-sqr(t)))}
+ {0}
+ {asin_a(t, sqrt_(1-sqr(t)))}
+ ;%
+\xintdeffloatfunc asind(t) := (t)??
+ {-asind_a(-t, sqrt_(1-sqr(t)))}
+ {0}
+ {asind_a(t, sqrt_(1-sqr(t)))}
+ ;%
+\xintdeffloatfunc acos(t) := Piover2 - asin(t);%
+\xintdeffloatfunc acosd(t):= 90 - asind(t);%
+\xintdeffloatfunc atan_b(t, w, z):= 0.5 * (w< 0)?
+ {Pi - asin_a(2z * t, -w*z)}
+ {asin_a(2z * t, w*z)}
+ ;%
+\xintdeffloatfunc atan_a(t, T) := atan_b(t, 1-T, inv(1+T));%
+\xintdeffloatfunc atan(t):= (t)??
+ {-atan_a(-t, sqr(t))}
+ {0}
+ {atan_a(t, sqr(t))}
+ ;%
+\xintdeffloatfunc atand_b(t, w, z) := 0.5 * (w< 0)?
+ {180 - asind_a(2z * t, -w*z)}
+ {asind_a(2z * t, w*z)}
+ ;%
+\xintdeffloatfunc atand_a(t, T) := atand_b(t, 1-T, inv(1+T));%
+\xintdeffloatfunc atand(t) := (t)??
+ {-atand_a(-t, sqr(t))}
+ {0}
+ {atand_a(t, sqr(t))}
+ ;%
+\xintdeffloatfunc Arg(x, y):= (y>x)?
+ {(y>-x)?
+ {Piover2 - atan(x/y)}
+ {(y<0)?
+ {-Pi + atan(y/x)}
+ {Pi + atan(y/x)}
+ }
+ }
+ {(y>-x)?
+ {atan(y/x)}
+ {-Piover2 + atan(x/-y)}
+ }
+ ;%
+\xintdeffloatfunc atan2(y,x) := Arg(x, y);%
+\xintdeffloatfunc Argd(x, y):= (y>x)?
+ {(y>-x)?
+ {90 - atand(x/y)}
+ {(y<0)?
+ {-180 + atand(y/x)}
+ {180 + atand(y/x)}
+ }
+ }
+ {(y>-x)?
+ {atand(y/x)}
+ {-90 + atand(x/-y)}
+ }
+ ;%
+\xintdeffloatfunc atan2d(y,x) := Argd(x, y);%
+\xintdeffloatfunc pArg(x, y):= (y>x)?
+ {(y>-x)?
+ {Piover2 - atan(x/y)}
+ {Pi + atan(y/x)}
+ }
+ {(y>-x)?
+ {(y<0)?
+ {twoPi + atan(y/x)}
+ {atan(y/x)}
+ }
+ {threePiover2 + atan(x/-y)}
+ }
+ ;%
+\xintdeffloatfunc pArgd(x, y):=(y>x)?
+ {(y>-x)?
+ {90 - atan(x/y)*oneRadian}
+ {180 + atan(y/x)*oneRadian}
+ }
+ {(y>-x)?
+ {(y<0)?
+ {360 + atan(y/x)*oneRadian}
+ {atan(y/x)*oneRadian}
+ }
+ {270 + atan(x/-y)*oneRadian}
+ }
+ ;%
\expandafter\let\csname XINT_flexpr_func_tg\expandafter\endcsname
\csname XINT_flexpr_func_tan\endcsname
\expandafter\let\csname XINT_flexpr_func_cotg\expandafter\endcsname
@@ -483,18 +568,18 @@
\xintFor #1 in {sin, cos, tan, sec, csc, cot,
asin, acos, atan}\do
{%
- \xintdefefunc #1(x) := \xintfloatexpr #1(sfloat(x))\relax;%
- \xintdefefunc #1d(x):= \xintfloatexpr #1d(sfloat(x))\relax;%
+ \xintdeffunc #1(x) := \xintfloatexpr #1(sfloat(x))\relax;%
+ \xintdeffunc #1d(x):= \xintfloatexpr #1d(sfloat(x))\relax;%
}%
\xintFor #1 in {Arg, pArg, atan2}\do
{%
- \xintdefefunc #1(x, y) := \xintfloatexpr #1(sfloat(x), sfloat(y))\relax;%
- \xintdefefunc #1d(x, y):= \xintfloatexpr #1d(sfloat(x), sfloat(y))\relax;%
+ \xintdeffunc #1(x, y) := \xintfloatexpr #1(sfloat(x), sfloat(y))\relax;%
+ \xintdeffunc #1d(x, y):= \xintfloatexpr #1d(sfloat(x), sfloat(y))\relax;%
}%
-\xintdefefunc tg(x) := \xintfloatexpr tg(sfloat(x))\relax;%
-\xintdefefunc cotg(x):= \xintfloatexpr cotg(sfloat(x))\relax;%
-\xintdefefunc sinc(x):= \xintfloatexpr sinc(sfloat(x))\relax;%
-\xintFor* #1 in {iDTVtuwxyzX}\do{\xintrestorelettervar{#1}}%
+\xintdeffunc tg(x) := \xintfloatexpr tg(sfloat(x))\relax;%
+\xintdeffunc cotg(x):= \xintfloatexpr cotg(sfloat(x))\relax;%
+\xintdeffunc sinc(x):= \xintfloatexpr sinc(sfloat(x))\relax;%
+\xintFor* #1 in {iDTVtuwxyzX}\do{\xintrestorevariable{#1}}%
\endinput
%%
%% End of file `xinttrig.sty'.