diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xinttrig.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xinttrig.sty | 946 |
1 files changed, 618 insertions, 328 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xinttrig.sty b/Master/texmf-dist/tex/generic/xint/xinttrig.sty index 563d14760da..c10106cb894 100644 --- a/Master/texmf-dist/tex/generic/xint/xinttrig.sty +++ b/Master/texmf-dist/tex/generic/xint/xinttrig.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle 1.4d 2021/03/29 +%% The xint bundle 1.4e 2021/05/05 %% Copyright (C) 2013-2021 by Jean-Francois Burnol %% xinttrig: Trigonometry for the xintexpr package %% --------------------------------------------------------------- @@ -61,137 +61,287 @@ \fi \fi \z% -\catcode`_ 11 \XINT_setcatcodes \catcode`? 12 +\edef\XINTtrigendinput{\XINTrestorecatcodes\noexpand\endinput}\XINTsetcatcodes% +\catcode`? 12 \ifcsname xintlibver@trig\endcsname \expandafter\xint_firstoftwo \else \expandafter\xint_secondoftwo \fi {\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}% -{\expandafter\gdef\csname xintlibver@trig\endcsname{2021/03/29 v1.4d}% +{\expandafter\gdef\csname xintlibver@trig\endcsname{2021/05/05 v1.4e}% \XINT_providespackage \ProvidesPackage{xinttrig}% -[2021/03/29 v1.4d Trigonometrical functions for xintexpr (JFB)]% +[2021/05/05 v1.4e Trigonometrical functions for xintexpr (JFB)]% }% \xintFor* #1 in {iDTVtuwxyzX}\do{\xintensuredummy{#1}}% -\def\xintreloadxinttrig - {\edef\XINT_restorecatcodes_now{\XINT_restorecatcodes}% - \XINT_setcatcodes\catcode`? 12 - \input xinttrig.sty - \XINT_restorecatcodes_now}% -\xintdeffloatvar twoPi := 0 + - 6.28318530717958647692528676655900576839433879875021164194989;% -\xintdeffloatvar threePiover2 := 0 + - 4.71238898038468985769396507491925432629575409906265873146242;% -\xintdeffloatvar Pi := 0 + - 3.14159265358979323846264338327950288419716939937510582097494;% -\xintdeffloatvar Piover2 := 0 + - 1.57079632679489661923132169163975144209858469968755291048747;% -\xintdeffloatvar oneDegree := 0 + - 0.0174532925199432957692369076848861271344287188854172545609719;% Pi/180 -\xintdeffloatvar oneRadian := 0 + - 57.2957795130823208767981548141051703324054724665643215491602;% 180/Pi -\xintdeffloatvar invfact\xintListWithSep{, invfact}{\xintSeq{2}{44}}% - := \xintfloatexpr [\XINTdigits] % force float rounding after exact evaluations - \xintexpr rseq(1/2; @/i, i=3..44)\relax % no need to hide this inner ; - \relax;% -\xintdeffloatfunc sin_aux(X) := 1 - X(invfact3 - X(invfact5 -\ifnum\XINTdigits>4 - - X(invfact7 -\ifnum\XINTdigits>6 - - X(invfact9 +\def\xintreloadxinttrig{\input xinttrig.sty }% +\xintdefvar @twoPi := + float( +6.2831853071795864769252867665590057683943387987502116419498891846156328125724180 + ,\xinttheDigits+4);% +\xintdefvar @threePiover2 := + float( +4.7123889803846898576939650749192543262957540990626587314624168884617246094293135 + ,\xinttheDigits+4);% +\xintdefvar @Pi := + float( +3.1415926535897932384626433832795028841971693993751058209749445923078164062862090 + ,\xinttheDigits+4);% +\xintdefvar @Piover2 := + float( +1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 + ,\xinttheDigits+4);% +\xintdefvar @oneDegree := + float( +0.017453292519943295769236907684886127134428718885417254560971914401710091146034494 + ,\xinttheDigits+4);% +\xintdefvar @oneRadian := + float( +57.295779513082320876798154814105170332405472466564321549160243861202847148321553 + ,\xinttheDigits+12);% +\catcode`~ 12 +\def\XINT_tmpa#1#2#3.#4.% +{% + \let #1#2% + \def #2##1##2##3##4{##2##3{{~expanded{~unexpanded{#4[#3]}~expandafter}~expanded{##1##4}}}}% +}% +\expandafter\XINT_tmpa + \csname XINT_flexpr_exec_+_\expandafter\endcsname + \csname XINT_flexpr_exec_+\expandafter\endcsname + \the\numexpr\XINTdigits+4.~XINTinFloatAdd_wopt.% +\expandafter\XINT_tmpa + \csname XINT_flexpr_exec_-_\expandafter\endcsname + \csname XINT_flexpr_exec_-\expandafter\endcsname + \the\numexpr\XINTdigits+4.~XINTinFloatSub_wopt.% +\expandafter\XINT_tmpa + \csname XINT_flexpr_exec_*_\expandafter\endcsname + \csname XINT_flexpr_exec_*\expandafter\endcsname + \the\numexpr\XINTdigits+4.~XINTinFloatMul_wopt.% +\expandafter\XINT_tmpa + \csname XINT_flexpr_exec_/_\expandafter\endcsname + \csname XINT_flexpr_exec_/\expandafter\endcsname + \the\numexpr\XINTdigits+4.~XINTinFloatDiv_wopt.% +\def\XINT_tmpa#1#2#3.#4.% +{% + \let #1#2% + \def #2##1##2##3{##1##2{{~expanded{~unexpanded{#4[#3]}~expandafter}##3}}}% +}% +\expandafter\XINT_tmpa + \csname XINT_flexpr_sqrfunc\expandafter\endcsname + \csname XINT_flexpr_func_sqr\expandafter\endcsname + \the\numexpr\XINTdigits+4.~XINTinFloatSqr_wopt.% +\expandafter\XINT_tmpa + \csname XINT_flexpr_sqrtfunc\expandafter\endcsname + \csname XINT_flexpr_func_sqrt\expandafter\endcsname + \the\numexpr\XINTdigits+4.~XINTinFloatSqrt.% +\expandafter\XINT_tmpa + \csname XINT_flexpr_invfunc\expandafter\endcsname + \csname XINT_flexpr_func_inv\expandafter\endcsname + \the\numexpr\XINTdigits+4.~XINTinFloatInv_wopt.% +\catcode`~ 3 \ifnum\XINTdigits>8 - - X(invfact11 -\ifnum\XINTdigits>10 - - X(invfact13 -\ifnum\XINTdigits>13 - - X(invfact15 -\ifnum\XINTdigits>15 - - X(invfact17 -\ifnum\XINTdigits>18 - - X(invfact19 -\ifnum\XINTdigits>21 - - X(invfact21 -\ifnum\XINTdigits>24 - - X(invfact23 -\ifnum\XINTdigits>27 - - X(invfact25 -\ifnum\XINTdigits>30 - - X(invfact27 -\ifnum\XINTdigits>33 - - X(invfact29 -\ifnum\XINTdigits>36 - - X(invfact31 -\ifnum\XINTdigits>39 - - X(invfact33 -\ifnum\XINTdigits>43 - - X(invfact35 -\ifnum\XINTdigits>46 - - X(invfact37 -\ifnum\XINTdigits>49 - - X(invfact39 -\ifnum\XINTdigits>53 - - X(invfact41 -\ifnum\XINTdigits>59 - - X(invfact43 - )\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi));% -\xintdeffloatfunc cos_aux(X) := 1 - X(invfact2 - X(invfact4 -\ifnum\XINTdigits>3 - - X(invfact6 -\ifnum\XINTdigits>5 - - X(invfact8 -\ifnum\XINTdigits>7 - - X(invfact10 -\ifnum\XINTdigits>9 - - X(invfact12 -\ifnum\XINTdigits>12 - - X(invfact14 -\ifnum\XINTdigits>14 - - X(invfact16 -\ifnum\XINTdigits>17 - - X(invfact18 -\ifnum\XINTdigits>20 - - X(invfact20 -\ifnum\XINTdigits>23 - - X(invfact22 -\ifnum\XINTdigits>25 - - X(invfact24 -\ifnum\XINTdigits>28 - - X(invfact26 -\ifnum\XINTdigits>32 - - X(invfact28 -\ifnum\XINTdigits>35 - - X(invfact30 -\ifnum\XINTdigits>38 - - X(invfact32 -\ifnum\XINTdigits>41 - - X(invfact34 -\ifnum\XINTdigits>44 - - X(invfact36 -\ifnum\XINTdigits>48 - - X(invfact38 -\ifnum\XINTdigits>51 - - X(invfact40 -\ifnum\XINTdigits>55 - - X(invfact42 -\ifnum\XINTdigits>58 - - X(invfact44 - )\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi));% -\expandafter\let\csname XINT_expr_func_sin_aux\expandafter\endcsname - \csname XINT_flexpr_func_sin_aux\endcsname -\expandafter\let\csname XINT_expr_func_cos_aux\expandafter\endcsname - \csname XINT_flexpr_func_cos_aux\endcsname -\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 +\edef\XINT_tmpG % 1/3! + {1\xintReplicate{\XINTdigits+2}{6}7[\the\numexpr-\XINTdigits-4]}% +\edef\XINT_tmpH % 1/5! + {8\xintReplicate{\XINTdigits+1}{3}[\the\numexpr-\XINTdigits-4]}% +\edef\XINT_tmpd % 1/5! + {8\xintReplicate{\XINTdigits+9}{3}[\the\numexpr-\XINTdigits-12]}% +\def\XINT_tmpe#1.#2.#3.#4.#5#6#7% +{% +\def#5##1\xint: +{% + \expandafter#6\romannumeral0\XINTinfloatS[#2]{##1}\xint:##1\xint: +}% +\def#6##1\xint: +{% + \expandafter#7\romannumeral0\xintsub{#4}{\XINTinFloat[#2]{\xintMul{#3}{##1}}}\xint: +}% +\def#7##1\xint:##2\xint: +{% + \xintSub{1/1[0]}{\XINTinFloat[#1]{\xintMul{##1}{##2}}}% +}% +}% +\expandafter\XINT_tmpe + \the\numexpr\XINTdigits+4\expandafter.% + \the\numexpr\XINTdigits+2\expandafter.\expanded{% + \XINT_tmpH.% 1/5! + \XINT_tmpG.% 1/3! + \expandafter}% + \csname XINT_SinAux_series_a_iii\expandafter\endcsname + \csname XINT_SinAux_series_b\expandafter\endcsname + \csname XINT_SinAux_series_c_i\endcsname +\def\XINT_tmpa #1 #2 #3 #4 #5 #6 #7 #8 % +{% + \def\XINT_tmpb ##1##2##3##4##5% + {% + \def\XINT_tmpc####1.####2.####3.####4.####5.% + {% + \def##1########1\xint: + {% + \expandafter##2% + \romannumeral0\XINTinfloatS[####1]{########1}\xint:########1\xint: + }% + \def##2########1\xint: + {% + \expandafter##3% + \romannumeral0\XINTinfloatS[####2]{########1}\xint:########1\xint: + }% + \def##3########1\xint: + {% + \expandafter##4% + \romannumeral0\xintsub{####4}{\XINTinFloat[####2]{\xintMul{####3}{########1}}}\xint: + }% + \def##4########1\xint:########2\xint: + {% + \expandafter##5% + \romannumeral0\xintsub{####5}{\XINTinFloat[####1]{\xintMul{########1}{########2}}}\xint: + }% + }% + }% + \expandafter\XINT_tmpb + \csname XINT_#8Aux_series_a_\romannumeral\numexpr#1-1\expandafter\endcsname + \csname XINT_#8Aux_series_a_\romannumeral\numexpr#1\expandafter\endcsname + \csname XINT_#8Aux_series_b\expandafter\endcsname + \csname XINT_#8Aux_series_c_\romannumeral\numexpr#1-2\expandafter\endcsname + \csname XINT_#8Aux_series_c_\romannumeral\numexpr#1-3\endcsname + \edef\XINT_tmpd + {\XINTinFloat[\XINTdigits-#2+8]{\xintDiv{\XINT_tmpd}{\the\numexpr#5*(#5-1)\relax}}}% + \let\XINT_tmpF\XINT_tmpG + \let\XINT_tmpG\XINT_tmpH + \edef\XINT_tmpH{\XINTinFloat[\XINTdigits-#2]{\XINT_tmpd}}% + \expandafter\XINT_tmpc + \the\numexpr\XINTdigits-#3\expandafter.% + \the\numexpr\XINTdigits-#2\expandafter.\expanded{% + \XINT_tmpH.% + \XINT_tmpG.% + \XINT_tmpF.% + }% +}% +\XINT_tmpa 4 -1 -2 -4 7 5 3 Sin % +\ifnum\XINTdigits>3 \XINT_tmpa 5 1 -1 -2 9 7 5 Sin \fi +\ifnum\XINTdigits>5 \XINT_tmpa 6 3 1 -1 11 9 7 Sin \fi +\ifnum\XINTdigits>8 \XINT_tmpa 7 6 3 1 13 11 9 Sin \fi +\ifnum\XINTdigits>11 \XINT_tmpa 8 9 6 3 15 13 11 Sin \fi +\ifnum\XINTdigits>14 \XINT_tmpa 9 12 9 6 17 15 13 Sin \fi +\ifnum\XINTdigits>16 \XINT_tmpa 10 14 12 9 19 17 15 Sin \fi +\ifnum\XINTdigits>19 \XINT_tmpa 11 17 14 12 21 19 17 Sin \fi +\ifnum\XINTdigits>22 \XINT_tmpa 12 20 17 14 23 21 19 Sin \fi +\ifnum\XINTdigits>25 \XINT_tmpa 13 23 20 17 25 23 21 Sin \fi +\ifnum\XINTdigits>28 \XINT_tmpa 14 26 23 20 27 25 23 Sin \fi +\ifnum\XINTdigits>31 \XINT_tmpa 15 29 26 23 29 27 25 Sin \fi +\ifnum\XINTdigits>34 \XINT_tmpa 16 32 29 26 31 29 27 Sin \fi +\ifnum\XINTdigits>37 \XINT_tmpa 17 35 32 29 33 31 29 Sin \fi +\ifnum\XINTdigits>40 \XINT_tmpa 18 38 35 32 35 33 31 Sin \fi +\ifnum\XINTdigits>44 \XINT_tmpa 19 42 38 35 37 35 33 Sin \fi +\ifnum\XINTdigits>47 \XINT_tmpa 20 45 42 38 39 37 35 Sin \fi +\ifnum\XINTdigits>51 \XINT_tmpa 21 49 45 42 41 39 37 Sin \fi +\ifnum\XINTdigits>55 \XINT_tmpa 22 53 49 45 43 41 39 Sin \fi +\ifnum\XINTdigits>58 \XINT_tmpa 23 56 53 49 45 43 41 Sin \fi +\edef\XINT_tmpd % 1/4! + {41\xintReplicate{\XINTdigits+8}{6}7[\the\numexpr-\XINTdigits-12]}% +\edef\XINT_tmpH % 1/4! + {41\xintReplicate{\XINTdigits}{6}7[\the\numexpr-\XINTdigits-4]}% +\def\XINT_tmpG{5[-1]}% 1/2! +\expandafter\XINT_tmpe + \the\numexpr\XINTdigits+4\expandafter.% + \the\numexpr\XINTdigits+3\expandafter.\expanded{% + \XINT_tmpH.% + \XINT_tmpG.% + \expandafter}% + \csname XINT_CosAux_series_a_iii\expandafter\endcsname + \csname XINT_CosAux_series_b\expandafter\endcsname + \csname XINT_CosAux_series_c_i\endcsname +\XINT_tmpa 4 -2 -3 -4 6 4 2 Cos % +\ifnum\XINTdigits>2 \XINT_tmpa 5 0 -2 -3 8 6 4 Cos \fi +\ifnum\XINTdigits>4 \XINT_tmpa 6 2 0 -2 10 8 6 Cos \fi +\ifnum\XINTdigits>7 \XINT_tmpa 7 5 2 0 12 10 8 Cos \fi +\ifnum\XINTdigits>9 \XINT_tmpa 8 7 5 2 14 12 10 Cos \fi +\ifnum\XINTdigits>12 \XINT_tmpa 9 10 7 5 16 14 12 Cos \fi +\ifnum\XINTdigits>15 \XINT_tmpa 10 13 10 7 18 16 14 Cos \fi +\ifnum\XINTdigits>18 \XINT_tmpa 11 16 13 10 20 18 16 Cos \fi +\ifnum\XINTdigits>20 \XINT_tmpa 12 18 16 13 22 20 18 Cos \fi +\ifnum\XINTdigits>24 \XINT_tmpa 13 22 18 16 24 22 20 Cos \fi +\ifnum\XINTdigits>27 \XINT_tmpa 14 25 22 18 26 24 22 Cos \fi +\ifnum\XINTdigits>30 \XINT_tmpa 15 28 25 22 28 26 24 Cos \fi +\ifnum\XINTdigits>33 \XINT_tmpa 16 31 28 25 30 28 26 Cos \fi +\ifnum\XINTdigits>36 \XINT_tmpa 17 34 31 28 32 30 28 Cos \fi +\ifnum\XINTdigits>39 \XINT_tmpa 18 37 34 31 34 32 30 Cos \fi +\ifnum\XINTdigits>42 \XINT_tmpa 19 40 37 34 36 34 32 Cos \fi +\ifnum\XINTdigits>45 \XINT_tmpa 20 43 40 37 38 36 34 Cos \fi +\ifnum\XINTdigits>49 \XINT_tmpa 21 47 43 40 40 38 36 Cos \fi +\ifnum\XINTdigits>53 \XINT_tmpa 22 51 47 43 42 40 38 Cos \fi +\ifnum\XINTdigits>57 \XINT_tmpa 23 55 51 47 44 42 40 Cos \fi +\ifnum\XINTdigits>60 \XINT_tmpa 24 58 55 51 46 44 42 Cos \fi +\let\XINT_tmpH\xint_undefined\let\XINT_tmpG\xint_undefined\let\XINT_tmpF\xint_undefined +\let\XINT_tmpd\xint_undefined\let\XINT_tmpe\xint_undefined +\def\XINT_SinAux_series#1% +{% + \expandafter\XINT_SinAux_series_a_iii + \romannumeral0\XINTinfloatS[\XINTdigits+4]{#1}\xint: +}% +\def\XINT_CosAux_series#1% +{% + \expandafter\XINT_CosAux_series_a_iii + \romannumeral0\XINTinfloatS[\XINTdigits+4]{#1}\xint: +}% +\fi % end of \XINTdigits>8 +\ifnum\XINTdigits<9 +\def\XINT_SinAux_series#1% +{% + \the\numexpr\expandafter\XINT_SinAux_b\romannumeral0\xintiround9{#1}.[-9]% +}% +\def\XINT_SinAux_b#1.% +{% + ((((((((((((%(\xint_c_x^ix/-210) + -4761905*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -156)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -110)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -72)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -42)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -20)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -6)*#1/\xint_c_x^ix+\xint_c_x^ix +}% +\def\XINT_CosAux_series#1% +{% + \the\numexpr\expandafter\XINT_CosAux_b\romannumeral0\xintiround9{#1}.[-9]% +}% +\def\XINT_CosAux_b#1.% +{% + ((((((((((((((%(\xint_c_x^ix/-240) + -4166667*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -182)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -132)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -90)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -56)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -30)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -12)*#1/\xint_c_x^ix+\xint_c_x^ix)/% + -2)*#1/\xint_c_x^ix+\xint_c_x^ix +}% +\fi +\def\XINT_flexpr_func_@sin_aux#1#2#3% +{% + \expandafter #1\expandafter #2\expandafter{% + \romannumeral`&&@\XINT:NEhook:f:one:from:one + {\romannumeral`&&@\XINT_SinAux_series#3}}% +}% +\def\XINT_flexpr_func_@cos_aux#1#2#3% +{% + \expandafter #1\expandafter #2\expandafter{% + \romannumeral`&&@\XINT:NEhook:f:one:from:one + {\romannumeral`&&@\XINT_CosAux_series#3}}% +}% +\xintdeffloatfunc @sin_series(x) := x * @sin_aux(sqr(x));% +\xintdeffloatfunc @cos_series(x) := @cos_aux(sqr(x));% +\def\XINT_mod_ccclx_i #1.% {% \expandafter\XINT_mod_ccclx_e\the\numexpr \expandafter\XINT_mod_ccclx_j\the\numexpr1\ifcase#1 \or0\or00\else000\fi.% }% -\def\XINT_mod_ccclx_j 1#1.#2.% #2=N is a non-negative mantissa +\def\XINT_mod_ccclx_j 1#1.#2.% {% (\XINT_mod_ccclx_ja {++}#2#1\XINT_mod_ccclx_jb 0000000\relax -}% 1 2345678 +}% \def\XINT_mod_ccclx_ja #1#2#3#4#5#6#7#8#9% {% #9+#8+#7+#6+#5+#4+#3+#2\xint_firstoftwo{+\XINT_mod_ccclx_ja{+#9+#8+#7}}{#1}% @@ -200,32 +350,36 @@ \def\XINT_mod_ccclx_jc +#1+#2+#3#4\relax{+80*(#3+#2+#1)+#3#2#1.}% \def\XINT_mod_ccclx_e#1.{\expandafter\XINT_mod_ccclx_z\the\numexpr(#1+180)/360-1.#1.}% \def\XINT_mod_ccclx_z#1.#2.{#2-360*#1.}% -\def\XINT_flexpr_func_sind_ #1#2#3% +\def\XINT_flexpr_func_@sind_rr #1#2#3% {% \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\XINT_tmpa #1.{% +\def\xintSind##1% +{% + \romannumeral`&&@\expandafter\xintsind\romannumeral0\XINTinfloatS[#1]{##1}}% +}\expandafter\XINT_tmpa\the\numexpr\XINTdigits+12.% \def\xintsind #1[#2#3]% {% \xint_UDsignfork #2\XINT_sind -\XINT_sind_int - \krof#2#3.#1..%<< attention extra dot + \krof#2#3.#1..% }% -\def\XINT_sind #1.#2.% NOT TO BE USED WITH VANISHING (OR NEGATIVE) #2. +\def\XINT_tmpa #1.{% +\def\XINT_sind ##1.##2.% {% \expandafter\XINT_sind_a - \romannumeral0\xinttrunc{\XINTdigits}{#2[#1]}% + \romannumeral0\xinttrunc{#1}{##2[##1]}% }% +}\expandafter\XINT_tmpa\the\numexpr\XINTdigits+5.% \def\XINT_sind_a{\expandafter\XINT_sind_i\the\numexpr\XINT_mod_ccclx_i0.}% \def\XINT_sind_int {% \expandafter\XINT_sind_i\the\numexpr\expandafter\XINT_mod_ccclx_i }% -\def\XINT_sind_i #1.% range reduction inside [0, 360[ +\def\XINT_sind_i #1.% {% \ifcase\numexpr#1/90\relax \expandafter\XINT_sind_A @@ -235,83 +389,77 @@ \else\expandafter\XINT_sind_E\the\numexpr-360+% \fi#1.% }% -\def\XINT_sind_A#1{% +\def\XINT_tmpa #1.#2.{% \def\XINT_sind_A##1.##2.% {% - \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}% + \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@sin_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{##1.##2}#2}}% }% -}\expandafter -\XINT_sind_A\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_sind_B#1{\xint_UDsignfork#1\XINT_sind_B_n-\XINT_sind_B_p\krof #1}% -\def\XINT_tmpa#1{% \def\XINT_sind_B_n-##1.##2.% {% - \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}% + \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@cos_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{\xintSub{##1[0]}{.##2}}#2}}% }% \def\XINT_sind_B_p##1.##2.% {% - \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}% + \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@cos_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{##1.##2}#2}}% }% -}\expandafter -\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_sind_C#1{\xint_UDsignfork#1\XINT_sind_C_n-\XINT_sind_C_p\krof #1}% -\def\XINT_tmpa#1{% \def\XINT_sind_C_n-##1.##2.% {% - \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}% + \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@sin_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{\xintSub{##1[0]}{.##2}}#2}}% }% \def\XINT_sind_C_p##1.##2.% {% - \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}% + \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@sin_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{##1.##2}#2}}% }% -}\expandafter -\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_sind_D#1{\xint_UDsignfork#1\XINT_sind_D_n-\XINT_sind_D_p\krof #1}% -\def\XINT_tmpa#1{% \def\XINT_sind_D_n-##1.##2.% {% - \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}% + \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@cos_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{\xintSub{##1[0]}{.##2}}#2}}% }% \def\XINT_sind_D_p##1.##2.% {% - \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}% + \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@cos_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{##1.##2}#2}}% }% -}\expandafter -\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_sind_E#1{% \def\XINT_sind_E-##1.##2.% {% - \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}% + \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@sin_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{\xintSub{##1[0]}{.##2}}#2}}% }% -}\expandafter -\XINT_sind_E\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_flexpr_func_cosd_ #1#2#3% +}\expandafter\XINT_tmpa + \the\numexpr\XINTdigits+4\expandafter.% + \romannumeral`&&@\xintbarefloateval @oneDegree\relax.% +\def\XINT_sind_B#1{\xint_UDsignfork#1\XINT_sind_B_n-\XINT_sind_B_p\krof #1}% +\def\XINT_sind_C#1{\xint_UDsignfork#1\XINT_sind_C_n-\XINT_sind_C_p\krof #1}% +\def\XINT_sind_D#1{\xint_UDsignfork#1\XINT_sind_D_n-\XINT_sind_D_p\krof #1}% +\def\XINT_flexpr_func_@cosd_rr #1#2#3% {% \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}}% +\def\XINT_tmpa #1.{% +\def\xintCosd##1% +{% + \romannumeral`&&@\expandafter\xintcosd\romannumeral0\XINTinfloatS[#1]{##1}}% +}\expandafter\XINT_tmpa\the\numexpr\XINTdigits+12.% \def\xintcosd #1[#2#3]% {% \xint_UDsignfork #2\XINT_cosd -\XINT_cosd_int - \krof#2#3.#1..%<< attention extra dot + \krof#2#3.#1..% }% -\def\XINT_cosd #1.#2.% NOT TO BE USED WITH VANISHING (OR NEGATIVE) #2. +\def\XINT_tmpa #1.{% +\def\XINT_cosd ##1.##2.% {% \expandafter\XINT_cosd_a - \romannumeral0\xinttrunc{\XINTdigits}{#2[#1]}% + \romannumeral0\xinttrunc{#1}{##2[##1]}% }% +}\expandafter\XINT_tmpa\the\numexpr\XINTdigits+5.% \def\XINT_cosd_a{\expandafter\XINT_cosd_i\the\numexpr\XINT_mod_ccclx_i0.}% \def\XINT_cosd_int {% @@ -327,259 +475,401 @@ \else\expandafter\XINT_cosd_E\the\numexpr-360+% \fi#1.% }% -\def\XINT_cosd_A#1{% +\def\XINT_tmpa#1.#2.{% \def\XINT_cosd_A##1.##2.% {% - \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}% + \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@cos_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{##1.##2}#2}}% }% -}\expandafter -\XINT_cosd_A\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_cosd_B#1{\xint_UDsignfork#1\XINT_cosd_B_n-\XINT_cosd_B_p\krof #1}% -\def\XINT_tmpa#1{% \def\XINT_cosd_B_n-##1.##2.% {% - \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}% + \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@sin_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{\xintSub{##1[0]}{.##2}}#2}}% }% \def\XINT_cosd_B_p##1.##2.% {% - \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}% + \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@sin_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{##1.##2}#2}}% }% -}\expandafter -\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_cosd_C#1{\xint_UDsignfork#1\XINT_cosd_C_n-\XINT_cosd_C_p\krof #1}% -\def\XINT_tmpa#1{% \def\XINT_cosd_C_n-##1.##2.% {% - \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}% + \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@cos_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{\xintSub{##1[0]}{.##2}}#2}}% }% \def\XINT_cosd_C_p##1.##2.% {% - \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}% + \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@cos_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{##1.##2}#2}}% }% -}\expandafter -\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_cosd_D#1{\xint_UDsignfork#1\XINT_cosd_D_n-\XINT_cosd_D_p\krof #1}% -\def\XINT_tmpa#1{% \def\XINT_cosd_D_n-##1.##2.% {% - \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}% + \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@sin_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{\xintSub{##1[0]}{.##2}}#2}}% }% \def\XINT_cosd_D_p##1.##2.% {% - \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}% + \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@sin_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{##1.##2}#2}}% }% -}\expandafter -\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\def\XINT_cosd_E#1{% \def\XINT_cosd_E-##1.##2.% {% - \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter - {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}% + \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_@cos_series\expandafter + {\romannumeral0\XINTinfloat[#1]{\xintMul{\xintSub{##1[0]}{.##2}}#2}}% }% -}\expandafter -\XINT_cosd_E\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}% -\xintdeffloatfunc sind(x) := (x)?? - {(x>=-45)? - {sin_(x*oneDegree)} - {-sind_(-x)} +}\expandafter\XINT_tmpa + \the\numexpr\XINTdigits+4\expandafter.% + \romannumeral`&&@\xintbarefloateval @oneDegree\relax.% +\def\XINT_cosd_B#1{\xint_UDsignfork#1\XINT_cosd_B_n-\XINT_cosd_B_p\krof #1}% +\def\XINT_cosd_C#1{\xint_UDsignfork#1\XINT_cosd_C_n-\XINT_cosd_C_p\krof #1}% +\def\XINT_cosd_D#1{\xint_UDsignfork#1\XINT_cosd_D_n-\XINT_cosd_D_p\krof #1}% +\xintdeffloatfunc @sind(x) := (x)?? + {(x>=-\ifnum\XINTdigits>8 45\else60\fi)? + {@sin_series(x*@oneDegree)} + {-@sind_rr(-x)} } - {0} - {(x<=45)? - {sin_(x*oneDegree)} - {sind_(x)} + {0e0} + {(x<=\ifnum\XINTdigits>8 45\else60\fi e0)? + {@sin_series(x*@oneDegree)} + {@sind_rr(x)} } ;% -\xintdeffloatfunc cosd(x) := (x)?? - {(x>=-45)? - {cos_(x*oneDegree)} - {cosd_(-x)} +\xintdeffloatfunc @cosd(x) := (x)?? + {(x>=-\ifnum\XINTdigits>8 45\else60\fi)? + {@cos_series(x*@oneDegree)} + {@cosd_rr(-x)} } - {1} - {(x<=45)? - {cos_(x*oneDegree)} - {cosd_(x)} + {1e0} + {(x<=\ifnum\XINTdigits>8 45\else60\fi e0)? + {@cos_series(x*@oneDegree)} + {@cosd_rr(x)} } ;% -\xintdeffloatfunc sin(x):= (abs(x)<0.79)? - {sin_(x)} +\xintdeffloatfunc @sin(x):= (abs(x)<\ifnum\XINTdigits>8 79e-2\else1e0\fi)? + {@sin_series(x)} {(x)?? - {-sind_(-x*oneRadian)} + {-@sind_rr(-\xintexpr x*@oneRadian\relax)} {0} - {sind_(x*oneRadian)} + {@sind_rr(\xintexpr x*@oneRadian\relax)} } ;% -\xintdeffloatfunc cos(x):= (abs(x)<0.79)? - {cos_(x)} - {cosd_(abs(x*oneRadian))} +\xintdeffloatfunc @cos(x):= (abs(x)<\ifnum\XINTdigits>8 79e-2\else1e0\fi)? + {@cos_series(x)} + {@cosd_rr(abs(\xintexpr x*@oneRadian\relax))} ;% -\xintdeffloatfunc sinc(x):= (abs(x)<0.79) ? - {sin_aux(sqr(x))} - {sind_(abs(x)*oneRadian)/abs(x)} +\xintdeffloatfunc @sinc(x):= (abs(x)<\ifnum\XINTdigits>8 79e-2\else1e0\fi) ? + {@sin_aux(sqr(x))} + {@sind_rr(\xintexpr abs(x)*@oneRadian\relax)/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) +\xintdeffloatfunc @tand(x):= @sind(x)/@cosd(x);% +\xintdeffloatfunc @cotd(x):= @cosd(x)/@sind(x);% +\xintdeffloatfunc @tan(x) := (x)?? + {(x>-\ifnum\XINTdigits>8 79e-2\else1e0\fi)? + {@sin(x)/@cos(x)} + {-@cotd(\xintexpr9e1+x*@oneRadian\relax) } } - {0} - {(x<0.79)? - {sin(x)/cos(x)} - {cotd(90-x*oneRadian)} + {0e0} + {(x<\ifnum\XINTdigits>8 79e-2\else1e0\fi)? + {@sin(x)/@cos(x)} + {@cotd(\xintexpr9e1-x*@oneRadian\relax)} } ;% -\xintdeffloatfunc cot(x) := (abs(x)<0.79)? - {cos(x)/sin(x)} +\xintdeffloatfunc @cot(x) := (abs(x)<\ifnum\XINTdigits>8 79e-2\else1e0\fi)? + {@cos(x)/@sin(x)} {(x)?? - {-tand(90+x*oneRadian)} - {0} - {tand(90-x*oneRadian)} + {-@tand(\xintexpr9e1+x*@oneRadian\relax)} + {0e0} + {@tand(\xintexpr9e1-x*@oneRadian\relax)} };% -\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 - + X(3/40 +\xintdeffloatfunc @sec(x) := inv(@cos(x));% +\xintdeffloatfunc @csc(x) := inv(@sin(x));% +\xintdeffloatfunc @secd(x):= inv(@cosd(x));% +\xintdeffloatfunc @cscd(x):= inv(@sind(x));% +\expandafter\let\csname XINT_expr_func_@sin_aux\expandafter\endcsname + \csname XINT_flexpr_func_@sin_aux\endcsname +\expandafter\let\csname XINT_expr_func_@cos_aux\expandafter\endcsname + \csname XINT_flexpr_func_@cos_aux\endcsname +\ifnum\XINTdigits>16 +\def\XINT_flexpr_func_@asin_II#1#2#3% +{% + \expandafter #1\expandafter #2\expandafter{% + \romannumeral`&&@\XINT:NEhook:f:one:from:one + {\romannumeral`&&@\XINT_Arcsin_II_a#3}}% +}% +\def\XINT_tmpc#1.% +{% +\def\XINT_Arcsin_II_a##1% +{% + \expandafter\XINT_Arcsin_II_c_i\romannumeral0\XINTinfloatS[#1]{##1}% +}% +\def\XINT_Arcsin_II_c_i##1[##2]% +{% + \xintAdd{1/1[0]}{##1/6[##2]}% +}% +}% +\expandafter\XINT_tmpc\the\numexpr\XINTdigits-14.% +\fi +\ifnum\XINTdigits>34 +\def\XINT_tmpc#1.#2.#3.#4.% +{% +\def\XINT_Arcsin_II_a##1% +{% + \expandafter\XINT_Arcsin_II_a_iii\romannumeral0\XINTinfloatS[#1]{##1}\xint: +}% +\def\XINT_Arcsin_II_a_iii##1\xint: +{% + \expandafter\XINT_Arcsin_II_b\romannumeral0\XINTinfloatS[#2]{##1}\xint:##1\xint: +}% +\def\XINT_Arcsin_II_b##1\xint: +{% + \expandafter\XINT_Arcsin_II_c_i\romannumeral0\xintadd{#4}{\XINTinFloat[#2]{\xintMul{#3}{##1}}}\xint: +}% +\def\XINT_Arcsin_II_c_i##1\xint:##2\xint: +{% + \xintAdd{1/1[0]}{\XINTinFloat[#1]{\xintMul{##1}{##2}}}% +}% +}% +\expandafter\XINT_tmpc + \the\numexpr\XINTdigits-14\expandafter.% + \the\numexpr\XINTdigits-32\expandafter.\expanded{% + \XINTinFloat[\XINTdigits-32]{3/40[0]}.% + \XINTinFloat[\XINTdigits-14]{1/6[0]}.% + }% +\fi +\ifnum\XINTdigits>52 +\def\XINT_tmpc#1.#2.#3.#4.#5.% +{% +\def\XINT_Arcsin_II_a_iii##1\xint: +{% + \expandafter\XINT_Arcsin_II_a_iv\romannumeral0\XINTinfloatS[#1]{##1}\xint:##1\xint: +}% +\def\XINT_Arcsin_II_a_iv##1\xint: +{% + \expandafter\XINT_Arcsin_II_b\romannumeral0\XINTinfloatS[#2]{##1}\xint:##1\xint: +}% +\def\XINT_Arcsin_II_b##1\xint: +{% + \expandafter\XINT_Arcsin_II_c_ii + \romannumeral0\xintadd{#4}{\XINTinfloat[#2]{\xintMul{#3}{##1}}}\xint: +}% +\def\XINT_Arcsin_II_c_ii##1\xint:##2\xint: +{% + \expandafter\XINT_Arcsin_II_c_i + \romannumeral0\xintadd{#5}{\XINTinFloat[#1]{\xintMul{##1}{##2}}}\xint: +}% +}% +\expandafter\XINT_tmpc + \the\numexpr\XINTdigits-32\expandafter.% + \the\numexpr\XINTdigits-50\expandafter.\expanded{% + \XINTinFloat[\XINTdigits-50]{5/112[0]}.% + \XINTinFloat[\XINTdigits-32]{3/40[0]}.% + \XINTinFloat[\XINTdigits-14]{1/6[0]}.% + }% +\fi +\def\XINT_flexpr_func_@asin_I#1#2#3% +{% + \expandafter #1\expandafter #2\expandafter{% + \romannumeral`&&@\XINT:NEhook:f:one:from:one + {\romannumeral`&&@\XINT_Arcsin_I#3}}% +}% +\def\XINT_Arcsin_I#1{\the\numexpr\expandafter\XINT_Arcsin_Ia\romannumeral0\xintiround9{#1}.}% +\def\XINT_Arcsin_Ia#1.% +{% + (\expandafter\XINT_Arcsin_Ib\the\numexpr#1*#1/\xint_c_x^ix.)*% + #1/\xint_c_x^ix[-9]% +}% +\def\XINT_Arcsin_Ib#1.% +{%(((((((((((((((( + % 3481/3660)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + % 3249/3422)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + % 3025/3192)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + % 2809/2970)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + % 2601/2756)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + % 2401/2550)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + % 2209/2352)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + % 2025/2162)*#1/\xint_c_x^ix+\xint_c_x^ix)*% +((((((((((((((((((((((((((((((((((((((((((% + %(\xint_c_x^ix*1849/1980)*% + 933838384*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 1681/1806)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 1521/1640)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 1369/1482)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 1225/1332)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 1089/1190)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 961/1056)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 841/930)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 729/812)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 625/702)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 529/600)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 441/506)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 361/420)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 289/342)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 225/272)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 169/210)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 121/156)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 81/110)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 49/72)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 25/42)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 9/20)*#1/\xint_c_x^ix+\xint_c_x^ix)*% + 1/6)*#1/\xint_c_x^ix+\xint_c_x^ix +}% \ifnum\XINTdigits>16 - + X(5/112 -\ifnum\XINTdigits>25 - + X(35/1152 -\ifnum\XINTdigits>35 - + X(63/2816 -\ifnum\XINTdigits>46 - + X(231/13312 - )\fi)\fi)\fi)\fi)\fi)\fi;% -\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);% -\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 @asin_o(D, T) := T + D*@asin_II(sqr(D));% + \xintdeffloatfunc @asin_n(V, T, t, u) :=% + @asin_o(\xintexpr t*@cos_aux(V) - u*T*@sin_aux(V)\relax, T);% +\else + \xintdeffloatfunc @asin_n(V, T, t, u) :=% + \xintexpr t*@cos_aux(V) - u*T*@sin_aux(V)\relax + T;% +\fi +\xintdeffloatfunc @asin_m(T, t, u) := @asin_n(sqr(T), T, t, u);% +\xintdeffloatfunc @asin_l(t, u) := @asin_m(@asin_I(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 @asind_a(t, u):= (t<u)? + {@asin_l(t, u) * @oneRadian} + {9e1 - @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 @asin(t) := (t)?? + {-@asin_a(-t, sqrt(1e0-sqr(t)))} + {0e0} + {@asin_a(t, sqrt(1e0-sqr(t)))} ;% -\xintdeffloatfunc asind(t) := (t)?? - {-asind_a(-t, sqrt_(1-sqr(t)))} - {0} - {asind_a(t, sqrt_(1-sqr(t)))} +\xintdeffloatfunc @asind(t) := (t)?? + {-@asind_a(-t, sqrt(1e0-sqr(t)))} + {0e0} + {@asind_a(t, sqrt(1e0-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 @acos(t) := @Piover2 - @asin(t);% +\xintdeffloatfunc @acosd(t):= 9e1 - @asind(t);% +\xintdeffloatfunc @atan_b(t, w, z):= 5e-1 * (w< 0)? + {@Pi - @asin_a(2e0*z * t, -w*z)} + {@asin_a(2e0*z * 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))} +\xintdeffloatfunc @atan_a(t, T) := @atan_b(t, 1e0-T, inv(1e0+T));% +\xintdeffloatfunc @atan(t):= (t)?? + {-@atan_a(-t, sqr(t))} {0} - {atan_a(t, sqr(t))} + {@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_b(t, w, z) := 5e-1 * (w< 0)? + {18e1 - @asind_a(2e0*z * t, -w*z)} + {@asind_a(2e0*z * 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))} +\xintdeffloatfunc @atand_a(t, T) := @atand_b(t, 1e0-T, inv(1e0+T));% +\xintdeffloatfunc @atand(t) := (t)?? + {-@atand_a(-t, sqr(t))} {0} - {atand_a(t, sqr(t))} + {@atand_a(t, sqr(t))} ;% -\xintdeffloatfunc Arg(x, y):= (y>x)? +\xintdeffloatfunc @Arg(x, y):= (y>x)? {(y>-x)? - {Piover2 - atan(x/y)} + {@Piover2 - @atan(x/y)} {(y<0)? - {-Pi + atan(y/x)} - {Pi + atan(y/x)} + {-@Pi + @atan(y/x)} + {@Pi + @atan(y/x)} } } {(y>-x)? - {atan(y/x)} - {-Piover2 + atan(x/-y)} + {@atan(y/x)} + {-@Piover2 + @atan(x/-y)} } ;% -\xintdeffloatfunc atan2(y,x) := Arg(x, y);% -\xintdeffloatfunc Argd(x, y):= (y>x)? +\xintdeffloatfunc @atan2(y,x) := @Arg(x, y);% +\xintdeffloatfunc @Argd(x, y):= (y>x)? {(y>-x)? - {90 - atand(x/y)} + {9e1 - @atand(x/y)} {(y<0)? - {-180 + atand(y/x)} - {180 + atand(y/x)} + {-18e1 + @atand(y/x)} + {18e1 + @atand(y/x)} } } {(y>-x)? - {atand(y/x)} - {-90 + atand(x/-y)} + {@atand(y/x)} + {-9e1 + @atand(x/-y)} } ;% -\xintdeffloatfunc atan2d(y,x) := Argd(x, y);% -\xintdeffloatfunc pArg(x, y):= (y>x)? +\xintdeffloatfunc @atan2d(y,x) := @Argd(x, y);% +\xintdeffloatfunc @pArg(x, y):= (y>x)? {(y>-x)? - {Piover2 - atan(x/y)} - {Pi + atan(y/x)} + {@Piover2 - @atan(x/y)} + {@Pi + @atan(y/x)} } {(y>-x)? {(y<0)? - {twoPi + atan(y/x)} - {atan(y/x)} + {@twoPi + @atan(y/x)} + {@atan(y/x)} } - {threePiover2 + atan(x/-y)} + {@threePiover2 + @atan(x/-y)} } ;% -\xintdeffloatfunc pArgd(x, y):=(y>x)? +\xintdeffloatfunc @pArgd(x, y):=(y>x)? {(y>-x)? - {90 - atan(x/y)*oneRadian} - {180 + atan(y/x)*oneRadian} + {9e1 - @atan(x/y)*@oneRadian} + {18e1 + @atan(y/x)*@oneRadian} } {(y>-x)? - {(y<0)? - {360 + atan(y/x)*oneRadian} - {atan(y/x)*oneRadian} + {(y<0e0)? + {36e1 + @atan(y/x)*@oneRadian} + {@atan(y/x)*@oneRadian} } - {270 + atan(x/-y)*oneRadian} + {27e1 + @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 - \csname XINT_flexpr_func_cot\endcsname +\expandafter\let + \csname XINT_flexpr_exec_+\expandafter\endcsname + \csname XINT_flexpr_exec_+_\endcsname +\expandafter\let + \csname XINT_flexpr_exec_-\expandafter\endcsname + \csname XINT_flexpr_exec_-_\endcsname +\expandafter\let + \csname XINT_flexpr_exec_*\expandafter\endcsname + \csname XINT_flexpr_exec_*_\endcsname +\expandafter\let + \csname XINT_flexpr_exec_/\expandafter\endcsname + \csname XINT_flexpr_exec_/_\endcsname +\expandafter\let + \csname XINT_flexpr_func_sqr\expandafter\endcsname + \csname XINT_flexpr_sqrfunc\endcsname +\expandafter\let + \csname XINT_flexpr_func_sqrt\expandafter\endcsname + \csname XINT_flexpr_sqrtfunc\endcsname +\expandafter\let + \csname XINT_flexpr_func_inv\expandafter\endcsname + \csname XINT_flexpr_invfunc\endcsname \xintFor #1 in {sin, cos, tan, sec, csc, cot, asin, acos, atan}\do {% - \xintdeffunc #1(x) := \xintfloatexpr #1(sfloat(x))\relax;% - \xintdeffunc #1d(x):= \xintfloatexpr #1d(sfloat(x))\relax;% + \xintdeffloatfunc #1(x) := float_(@#1(x));% + \xintdeffloatfunc #1d(x) := float_(@#1d(x));% + \xintdeffunc #1(x) := float_(\xintfloatexpr @#1(sfloat(x))\relax);% + \xintdeffunc #1d(x):= float_(\xintfloatexpr @#1d(sfloat(x))\relax);% }% \xintFor #1 in {Arg, pArg, atan2}\do {% - \xintdeffunc #1(x, y) := \xintfloatexpr #1(sfloat(x), sfloat(y))\relax;% - \xintdeffunc #1d(x, y):= \xintfloatexpr #1d(sfloat(x), sfloat(y))\relax;% + \xintdeffloatfunc #1(x, y) := float_(@#1(x, y));% + \xintdeffloatfunc #1d(x, y) := float_(@#1d(x, y));% + \xintdeffunc #1(x, y) := float_(\xintfloatexpr @#1(sfloat(x), sfloat(y))\relax);% + \xintdeffunc #1d(x, y):= float_(\xintfloatexpr @#1d(sfloat(x), sfloat(y))\relax);% }% -\xintdeffunc tg(x) := \xintfloatexpr tg(sfloat(x))\relax;% -\xintdeffunc cotg(x):= \xintfloatexpr cotg(sfloat(x))\relax;% -\xintdeffunc sinc(x):= \xintfloatexpr sinc(sfloat(x))\relax;% +\xintdeffloatfunc sinc(x):= float_(@sinc(x));% +\xintdeffunc sinc(x):= float_(\xintfloatexpr @sinc(sfloat(x))\relax);% +\expandafter\let\csname XINT_flexpr_func_tg\expandafter\endcsname + \csname XINT_flexpr_func_tan\endcsname +\expandafter\let\csname XINT_flexpr_func_cotg\expandafter\endcsname + \csname XINT_flexpr_func_cot\endcsname +\xintdeffloatvar twoPi := @twoPi;% +\xintdeffloatvar threePiover2 := @threePiover2;% +\xintdeffloatvar Pi := @Pi;% +\xintdeffloatvar Piover2 := @Piover2;% +\xintdeffloatvar oneDegree := @oneDegree;% +\xintdeffloatvar oneRadian := @oneRadian;% +\xintunassignvar{@twoPi}\xintunassignvar{@threePiover2}% +\xintunassignvar{@Pi}\xintunassignvar{@Piover2}% +\xintunassignvar{@oneRadian}\xintunassignvar{@oneDegree}% \xintFor* #1 in {iDTVtuwxyzX}\do{\xintrestorevariable{#1}}% +\XINTtrigendinput% \endinput %% %% End of file `xinttrig.sty'. |