From 3be02a286147e890dbb93975275c26da331ca4c0 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 29 Oct 2015 21:09:46 +0000 Subject: xint (29oct15) git-svn-id: svn://tug.org/texlive/trunk@38738 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/generic/xint/xint.dtx | 334 +++++++++++++++++-------- 1 file changed, 233 insertions(+), 101 deletions(-) (limited to 'Master/texmf-dist/source/generic/xint/xint.dtx') diff --git a/Master/texmf-dist/source/generic/xint/xint.dtx b/Master/texmf-dist/source/generic/xint/xint.dtx index c1254995b5a..f499332f3cb 100644 --- a/Master/texmf-dist/source/generic/xint/xint.dtx +++ b/Master/texmf-dist/source/generic/xint/xint.dtx @@ -2,24 +2,24 @@ % N.B.: this dtx file does NOT use \DocInput, only docstrip. The user manual % latex source is NOT prefixed with percent characters. %<*dtx> -\def\xintdtxtimestamp {Time-stamp: <20-10-2015 00:44:07 CEST>} +\def\xintdtxtimestamp {Time-stamp: <29-10-2015 13:19:20 CET>} % %<*drv> %% --------------------------------------------------------------- -\def\xintdocdate {2015/10/19} -\def\xintbndldate{2015/10/19} -\def\xintbndlversion {1.2a} +\def\xintdocdate {2015/10/29} +\def\xintbndldate{2015/10/29} +\def\xintbndlversion {1.2b} % %<*dtx> \iffalse % meta-comment % %% README %% CHANGE LOG -%% xint v1.2a -%% 2015/10/19 +%% xint v1.2b +%% 2015/10/29 %<*readme|changes> - Source: xint.dtx v1.2a 2015/10/19 (doc 2015/10/19) + Source: xint.dtx v1.2b 2015/10/29 (doc 2015/10/29) Author: Jean-Francois Burnol Info: Expandable operations on big integers, decimals, fractions License: LPPL 1.3c @@ -27,7 +27,7 @@ % %<*!readme&!changes&!dohtmlsh&!dopdfsh&!makefile> %% --------------------------------------------------------------- -%% The xint bundle v1.2a 2015/10/19 +%% The xint bundle v1.2b 2015/10/29 %% Copyright (C) 2013-2015 by Jean-Francois Burnol %%% xintkernel: Paraphernalia for the xint packages %%% xinttools: Expandable and non-expandable utilities @@ -237,6 +237,15 @@ pandoctpl.latex, doHTMLs.sh, doPDFs.sh, xint.dvi, xint.pdf, Makefile.mk. %-------------------------------------------------------- %<*changes>------------------------------------------------------- +`1.2b (2015/10/29)` +---- + + - bugfix in **xintcore**: recent release `1.2` introduced a bug in + the division macros, causing a crash when the divisor started + with 99999999 (it was attempted to use with 1+99999999 a + subroutine expecting only 8-digits numbers). + + `1.2a (2015/10/19)` ---- @@ -2474,8 +2483,21 @@ pdfpagemode=UseOutlines} \frenchspacing \renewcommand\familydefault\sfdefault +% Septembre 2015 \def\liiibigint{\href{http://latex-project.org/svnroot/experimental/trunk/l3trial/l3bigint}{l3bigint}} +% 20 octobre 2015 hier j'ai un peu rapidement remplacé les \romannumeral-`0 +% dans le code par de mystérieux \romannumeral`, en T1, +% newtxtt donne un ` pour le slot 0, les quelques occurrences de \meaning +% après \xintNewExpr dans la doc donne donc un bien mystérieux `` en output. + +\makeatletter +\def\fixmeaning {\expandafter\fix@meaning\meaning} +\expandafter\edef\expandafter\fix@meaning + \expandafter #\expandafter1\string\romannumeral#2#3% + {#1\string\romannumeral`\string^\string^@} +\makeatother + \begin{document}\thispagestyle{empty}% \ttzfamily already done \pdfbookmark[1]{Title page}{TOP} % \makeatletter % @ n'est plus actif dans dtx 1.1, ouf! @@ -2504,7 +2526,7 @@ pdfpagemode=UseOutlines} % Mercredi 08 octobre 2014 à 22:03:19 % Skips safely. \ifnum\dosourcexint=1 -\catcode`+ 0 +\catcode`+ 0 \catcode0 9 % n'importe quoi sauf 15 (car ^^@) \catcode`\\ 12 +expandafter+iffalse+fi \fi @@ -6908,7 +6930,7 @@ The\xintNewIExpr \FA [2] {protect(\DimToNum {#2})^3/protect(\DimToNum{#1})^2} \footnote{see \autoref{sssec:protect} for the significance of the |protect|'s: they are needed because the expression has macro parameters inside macros, and not only functions from the \csbxint{expr} syntax. The \csa{FA} turns - out to have meaning \texttt{\meaning\FA}. The \csa{romannumeral} part is + out to have meaning \texttt{\fixmeaning\FA}. The \csa{romannumeral} part is only to ensure it expands in only two steps, and could be removed. The \expandafter|\string\xintRound::csv| and \expandafter|\string\xintSPRaw::csv| commands are used internally by @@ -9230,13 +9252,27 @@ zeroes.) \subsection{\csbh{xintTFrac}}\label{xintTFrac} \csa{xintTFrac}|{f}|\etype{\Ff} returns the fractional part, -|f=trunc(f)+frac(f)|. -The |T| stands for `Trunc', and there could similar macros associated to -`Round', `Floor', and `Ceil'. Inside |\xintexpr..\relax|, the function |frac| is -mapped to \csa{xintTFrac}. Inside |\xint|\-|floatexpr..\relax|, |frac| first -applies -\csa{xintTFrac} to its argument (which may be in float format, or -an exact fraction), and only next makes the float conversion. +|f=trunc(f)+frac(f)|. Thus if |f<0|, then |-10| one has +|0<= frac(f)<1|. The |T| stands for `Trunc', and there should exist also +similar macros associated respectively with `Round', `Floor', and `Ceil', each +type of rounding to an integer deserving arguably to be associated with a +fractional ``modulo''. By sheer laziness, the package currently implements +only the ``modulo'' associated with `Truncation'. Other types of modulo may be +obtained more cumbersomely via a combination of the rounding with a subsequent +subtraction from |f|. + +Notice that the result is filtered through \csbxint{REZ}, and will thus be of +the form |A/B[N]|, where neither |A| nor |B| has trailing zeros. But the +output fraction is not reduced to smallest terms.\MyMarginNote{\noindent + Do\-cu\-men\-ta\-tion updated.} + +The function call in expressions (\csbxint{expr}, \csbxint{floatexpr}) is +|frac|. Inside |\xintexpr..\relax|, the function |frac| is mapped to +\csa{xintTFrac}. Inside |\xintfloatexpr..\relax|, |frac| first applies +\csa{xintTFrac} to its argument (which may be an exact fraction with more +digits than the floating point precision) and only in a second stage makes the +conversion to a floating point number with the precision as set by |\xintDigits| +(default is \dtt{16}). % \leftedline{|\xintTFrac {1235/97}|\dtt{=\xintTFrac {1235/97}}\quad |\xintTFrac {-1235/97}|\dtt{=\xintTFrac {-1235/97}}} @@ -11222,36 +11258,34 @@ necessary to do without the facilities of the \xintexprname package. \subsection{The \csbh{xintNewExpr} command}\label{xintNewExpr} -% This allows to define a completely expandable macro with parameters, expanding -% in two steps to its final evaluation, and corresponding to the given -% \xintname{}expression where the parameters are input using the usual -% macro-parameter: |#1|, ..., |#9|. - The command is used as: % \leftedline{|\xintNewExpr{\myformula}[n]|\marg{stuff}, where} \begin{itemize} \item \meta{stuff} will be inserted inside |\xinttheexpr . . . \relax|, -\item |n| is an integer between zero and nine, inclusive, and tells how many - parameters will |\myformula| have (it is \emph{mandatory} even if - |n=0|% +\item |n| is an integer between zero and nine, inclusive, which is the number + of parameters of |\myformula|, +\item the placeholders |#1|, |#2|, ..., |#n| are used inside \meta{stuff} in + their usual r\^ole,% % -\footnote{there is some use for \csa{xintNewExpr}|[0]| compared to an - \csa{edef} as \csa{xintNewExpr} has some built-in catcode protection.}) +\catcode`# 12 +\footnote{if \csa{xintNewExpr} is used inside a macro, + the |#|'s must be doubled as usual.} + \footnote{the |#|'s will in pratice have their usual + catcode, but category code other |#|'s are accepted too.} +\catcode`# 6 % -\item the placeholders |#1|, |#2|, ..., |#n| are used inside \meta{stuff} in - their usual r\^ole.\footnote{such \#'s may be of category code other or have - their usual catcode.} +\item the |[n]| is \emph{mandatory}, even for |n=0|.% +\footnote{there is some use for \csa{xintNewExpr}|[0]| compared to an + \csa{edef} as \csa{xintNewExpr} has some built-in catcode protection.} +\item the macro |\myformula| is defined without checking if it already exists, + \LaTeX{} users might prefer to do first |\newcommand*\myformula {}| to get a + reasonable error message in case |\myformula| already exists, +\item the definition of |\myformula| made by |\xintNewExpr| is global (i.e. it + does not obey the scope of environments). The protection against active + characters is done automatically. \end{itemize} -The macro |\myformula| is defined without checking if it -already exists, \LaTeX{} users might prefer to do first |\newcommand*\myformula -{}| to get a reasonable error message in case |\myformula| already exists. - -The definition of |\myformula| made by |\xintNewExpr| is global (i.e. it does -not obey the scope of environments). The protection against active characters -is done automatically. - It will be a completely expandable macro entirely built-up using |\xintAdd|, |\xintSub|, |\xintMul|, |\xintDiv|, |\xintPow|, etc\dots as corresponds to the expression written with the infix operators. @@ -11268,43 +11302,70 @@ Macros created by |\xintNewExpr| can thus be nested. \end{everbatim*} \begin{framed} - The whole point of using \csbxint{NewExpr} is to produce a macro whose - execution will not populate the hash table contrarily to what |\xintexpr| - does to some extent (this impact on some of \TeX{}'s memory gets noticeable - only if many of thousands of \csbxint{expr}-essions are evaluated). + The use of \csbxint{NewExpr} circumvents the impact of the |\xintexpr| + parsers on \TeX's memory: it is useful if one has a formula which has to be + re-evaluated thousands of times with distinct inputs each with dozens, or + hundreds of characters. A ``formula'' created by |\xintNewExpr| is thus a macro whose parameters are given to a possibly very complicated combination of the various macros of \xintname and \xintfracname. Consequently, one can not use at all any infix - notation there, but only the input format recognized by the \xintfracname - macros. + notation in the inputs, but only the formats which are recognized by the + \xintfracname macros. -The situation is thus quite distinct from a macro with parameters defined via -a simple |\def| such as: + This is thus quite different from a macro with parameters which one would + have defined via a simple |\def| or |\newcommand| as for example: % - \leftedline{|\def\myformula #1{\xinttheexpr (#1)^3\relax}|} + \leftedline{|\newcommand\myformula [1]{\xinttheexpr (#1)^3\relax}|} + % + Such a macro |\myformula|, if it was used tens of thousands of times with + various big inputs would end up populating large parts of \TeX's memory. It + would thus be better for such use cases to go for: + % + \leftedline{|\xintNewExpr\myformula [1]{#1^3\relax}|} + % + Here naturally the situation is over-simplified and it would be even simpler + to go directly for the use of the macro |\xintPow| or |\xintPower|. \end{framed} |\xintNewExpr| tries to do as many evaluations as are possible at the time the macro parameters are still parameters. Let's see a few examples. For this I -will use |\meaning| which reveals the contents of a macro. We will thus see -some private macros of the \xintname bundle, which should not be directly -used. If the things look a bit complicated, it is because they have to cater -for many possibilities. With |\meaning| we will see what has already been -evaluated. +will use |\meaning| which reveals the contents of a macro. -\emph{Remark:} In these examples we sometimes use |\printnumber| to avoid for -the meaning to go into the right margin, but this zaps all spaces originally -in the output from |\meaning|. +\begin{enumerate} +\item in these examples we sometimes use |\printnumber| to avoid for the + meaning to go into the right margin, but this zaps all spaces originally in + the output from |\meaning|, +\item the examples use a mysterious |\fixmeaning| macro, which is there to get + in the display |\romannumeral`^^@| rather than the frankly cabalistic + |\romannumeral``| which made the admiration of the readers of the + documentation dated |2015/10/19| (the second |`| stood for an ascii code + zero token as per |T1| encoded |newtxtt| font). Thus the true meaning is + ``fixed'' to display something different which is how the macro could be + defined in a standard |tex| source file (modulo, as one can see in example, + the use of characters such as |:| as letters in control sequence names). + Prior to |1.2a|, the meaning would have started with a more mundane + |\romannumeral-`0|, but I decided at the time of releasing |1.2a| to imitate + the serious guys and switch for the more hacky yet |\romannumeral`^^@| + everywhere in the source code (not only in the macros produced by + \csbxint{NewExpr}), or to be more precise for an equivalent as the caret has + catcode letter in \xintname's source code, and I had to use another + character. +\item the meaning reveals the use of some private macros from the \xintname + bundle, which should not be directly used. If the things look a bit + complicated, it is because they have to cater for many possibilities. +\item the point of showing the meaning is also to see what has already been + evaluated in the construction of the macros. +\end{enumerate} \begin{everbatim*} -\xintNewIIExpr\FA [1]{13*25*78*#1+2826*292}\meaning\FA +\xintNewIIExpr\FA [1]{13*25*78*#1+2826*292}\fixmeaning\FA \end{everbatim*} \smallskip \begin{everbatim*} \xintNewIExpr\FA [2]{(3/5*9/7*13/11*#1-#2)*3^7} -\printnumber{\meaning\FA} +\printnumber{\fixmeaning\FA} \end{everbatim*} \smallskip @@ -11312,28 +11373,28 @@ in the output from |\meaning|. \begin{everbatim*} % an example with optional parameter \xintNewIExpr\FA [3]{[24] (#1+#2)/(#1-#2)^#3} -\printnumber{\meaning\FA} +\printnumber{\fixmeaning\FA} \end{everbatim*} \smallskip \begin{everbatim*} \xintNewFloatExpr\FA [2]{[12] 3.1415^3*#1-#2^5} -\printnumber{\meaning\FA} +\printnumber{\fixmeaning\FA} \end{everbatim*} \smallskip \begin{everbatim*} \xintNewExpr\DET[9]{ #1*#5*#9+#2*#6*#7+#3*#4*#8-#1*#6*#8-#2*#4*#9-#3*#5*#7 } -\printnumber{\meaning\DET} +\printnumber{\fixmeaning\DET} \end{everbatim*} \smallskip \begin{everbatim*} \xintNewExpr\FA[3]{ #1*#1+#2*#2+#3*#3-(#1*#2+#2*#3+#3*#1) } -\printnumber{\meaning\FA } +\printnumber{\fixmeaning\FA } \end{everbatim*} @@ -11366,7 +11427,7 @@ should succeed. And the created macro will \emph{not evaluate the branches to \begin{everbatim*} \xintNewExpr\Formula [3]{ if((#1>#2) && (#2>#3), sqrt(#1-#2)*sqrt(#2-#3), #1^2+#3/#2) }% -\printnumber{\meaning\Formula } +\printnumber{\fixmeaning\Formula } \end{everbatim*} This formula (with its |\xintiiifNotZero|) will gobble the false branch without @@ -11379,7 +11440,7 @@ Another example \begin{everbatim*} \xintNewExpr\myformula[3]{ ifsgn(#1,#2/#3,#2-#3,#2*#3) }% -\meaning\myformula +\fixmeaning\myformula \end{everbatim*} Again, this macro gobbles the false branches, as would have the operator |??| @@ -11409,10 +11470,10 @@ applied to them. \begin{everbatim*} \xintNewExpr\myformI[2]{protect(\xintRound{#1}{#2}) - protect(\xintTrunc{#1}{#2})}% -\meaning\myformI +\fixmeaning\myformI \xintNewIIExpr\formula [3]{rem(#1,quo(protect(\the\numexpr #2\relax),#3))}% -\noindent\meaning\formula +\noindent\fixmeaning\formula \end{everbatim*} Only macros involving the |#1|, |#2|, etc\dots should be protected in this @@ -13743,6 +13804,7 @@ $1$ or $-1$. \ifnum\dosourcexint=1 +fi +catcode`\ 0 +\catcode0 15 % retour à la normale, peu importe \catcode`\+ 12 \etocignoredepthtags \etocsetnexttocdepth{section} @@ -13799,6 +13861,11 @@ $1$ or $-1$. % This is \expandafter|\xintbndlversion| of \expandafter|\xintbndldate|. % % \begin{itemize} +% \item |1.2b| of |2015/10/29| corrects a bug introduced in recent release +% |1.2| in the division macro of |xintcore.sty| (a sub-routine expecting +% only eight digit numbers was called with |1+99999999|; happened with +% divisors |99999999xyz...|). +% % \item Release |1.2a| of |2015/10/19| fixes a bad bug of |1.2| in % |xintexpr.sty|, the parsers mistook decimals |0.0x...| for zero ! Also I % took this opportunity to replace about 350 uses of |\romannumeral-`0| @@ -14025,7 +14092,7 @@ $1$ or $-1$. \fi \XINT_providespackage \ProvidesPackage {xintkernel}% - [2015/10/19 v1.2a Paraphernalia for the xint packages (jfB)]% + [2015/10/29 v1.2b Paraphernalia for the xint packages (jfB)]% % \end{macrocode} % \subsection{Constants} % |v1.2| decides to move them to \xintkernelnameimp from \xintcorenameimp and @@ -14321,7 +14388,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xinttools}% - [2015/10/19 v1.2a Expandable and non-expandable utilities (jfB)]% + [2015/10/29 v1.2b Expandable and non-expandable utilities (jfB)]% % \end{macrocode} % \lverb|\XINT_toks is used in macros such as \xintFor. It is not used % elsewhere in the xint bundle.| @@ -15809,7 +15876,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintcore}% - [2015/10/19 v1.2a Expandable arithmetic on big integers (jfB)]% + [2015/10/29 v1.2b Expandable arithmetic on big integers (jfB)]% % \end{macrocode} % \subsection{Counts for holding needed constants} % \begin{macrocode} @@ -17325,13 +17392,29 @@ $1$ or $-1$. % \subsection{\csh{xintiDivision}, \csh{xintiQuo}, \csh{xintiRem}, % \csh{xintiiDivision}, \csh{xintiiQuo}, \csh{xintiiRem}} % \lverb|Completely rewritten for v1.2. +% % WARNING: some comments below try to describe the flow of tokens but they -% date back from xint 1.09j and I updated them on the fly while doing the 1.2 -% version. As the new works in base 10^8, not 10^4 and "drops" the quotient -% digits,rather than store them upfront as the earlier code, I may well have -% not correctly converted all such comments. At the last minute some +% date back to xint 1.09j and I updated them on the fly while doing the 1.2 +% version. As the routine now works in base 10^8, not 10^4 and "drops" the +% quotient digits,rather than store them upfront as the earlier code, I may +% well have not correctly converted all such comments. At the last minute some % previously #1 became stuff like #1#2#3#4, then of course the old comments -% describing what the macro parameters stand for are necessarily wrong.| +% describing what the macro parameters stand for are necessarily wrong. +% +% Side remark: the way tokens are grouped was not essentially modified in +% v1.2, although the situation has changed. It was fine-tuned in xint +% v1.0/v1.1 but the context has changed, and perhaps I should revisit this. +% As a corollary to the fact that quotient digits are now left behind thanks +% to the chains of \numexpr, some macros which in v1.0/v1.1 fetched up to 9 +% parameters now need handle less such parameters. Thus, some rationale for +% the way the code was structured has disappeared. +% +% v1.2 2015/10/15 had a bad bug which got corrected in v1.2b of 2015/10/29: a +% divisor starting with 99999999xyz... would cause a failure, simply because +% it was attempted to use the \XINT_div_mini routine with a divisor of +% 1+99999999=100000000 having 9 digits. Fortunately the origin of the bug was +% easy to find out. Too bad that my obviously very deficient test files +% did not detect it.| % \begin{macrocode} \def\xintiiQuo {\romannumeral0\xintiiquo }% \def\xintiiRem {\romannumeral0\xintiirem }% @@ -17470,6 +17553,14 @@ $1$ or $-1$. {% \XINT_div_prepare_f #4#3\X {#1}{#3}% }% +% \end{macrocode} +% \lverb|attention qu'on calcule ici x'=x+1 (x = huit premiers chiffres du +% diviseur) et que si x=99999999, x' aura donc 9 chiffres, pas compatible avec +% div_mini (avant 1.2, x avait 4 chiffres, et on faisait la division avec x' +% dans un \numexpr). Bon, facile à dire après avoir laissé passer ce bug dans +% v1.2. C'est le problème lorsqu'au lieu de tout refaire à partir de zéro on +% recycle d'anciennes routines qui avaient un contexte différent.| +% \begin{macrocode} \def\XINT_div_prepare_f #1#2#3#4#5#6#7#8#9\X {% \expandafter\XINT_div_prepare_g @@ -17704,7 +17795,7 @@ $1$ or $-1$. \romannumeral0\XINT_div_unsepR #2#31\R!1\R!1\R!1\R!1\R!1\R!1\R!1\R!\W.% }% % \end{macrocode} -% \lverb|#1={x'y}alpha.#2!#3=reste de A. +% \lverb|ATTENTION DESCRIPTION OBSOLÈTE. #1={x'y}alpha.#2!#3=reste de A. % #4={{x'y},x,K,L},#5=B,«c» devient {x'y},alpha sur K+4 chiffres.B, % {{x'y},x,K,L}, #6= nouvel alpha',B,«c»| % \begin{macrocode} @@ -17730,13 +17821,41 @@ $1$ or $-1$. \XINT_div_II_k #7{#4!#5}{#6}{00000000}% }% % \end{macrocode} -% \lverb|x'ya->1qx'yalpha.B, {{x'y},x,K,L}, nouveau alpha',B, «c».| +% \lverb|x'ya->1qx'yalpha.B, {{x'y},x,K,L}, nouveau alpha',B, «c». En fait, +% attention, ici #3 et #4 sont les 16 premiers chiffres du numérateur,sous la +% forme blocs 1<8chiffres>. +% +% ATTENTION! +% +% 2015/10/29 :j'avais introduit un bug ici dans v1.2 2015/10/15, car +% \XINT_div_mini veut un diviseur de huit chiffres, or si le dénominateur B +% débute par x=99999999, on aura x'=100000000, d'où évidemment un bug. Bon il +% faut intercepter x'=100000000. +% +% I need to recognize x'=100000000 in some not too penalizing way. Anyway, +% will try to optimize some other day.| % \begin{macrocode} \def\XINT_div_II_c #1#2#3#4% {% - \expandafter\XINT_div_II_d\the\numexpr\XINT_div_mini + \expandafter\XINT_div_II_d\the\numexpr\XINT_div_xmini #1.#2!#3!#4!{#1}{#2}#3!#4!% }% +\def\XINT_div_xmini #1% +{% + \xint_gob_til_one #1\XINT_div_xmini_a 1\XINT_div_mini #1% +}% +\def\XINT_div_xmini_a 1\XINT_div_mini 1#1% +{% + \xint_gob_til_zero #1\XINT_div_xmini_b 0\XINT_div_mini 1#1% +}% +\def\XINT_div_xmini_b 0\XINT_div_mini 10#1#2#3#4#5#6#7% +{% + \xint_gob_til_zero #7\XINT_div_xmini_c 0\XINT_div_mini 10#1#2#3#4#5#6#7% +}% +% \end{macrocode} +% \lverb|x'=10^8 and we return #1=1<8digits>.| +% \begin{macrocode} +\def\XINT_div_xmini_c 0\XINT_div_mini 100000000.50000000!#1!#2!{#1!}% % \end{macrocode} % \lverb|1 suivi de q1 sur huit chiffres! #2=x', #3=y, #4=alpha.#5=B, % {{x'y},x,K,L}, alpha', B, «c» --> nouvel alpha.x',y,B,q1,{{x'y},x,K,L}, @@ -17770,7 +17889,10 @@ $1$ or $-1$. }% % \end{macrocode} % \lverb|1!1!, alpha (sur K+1 blocs de 8). x', y, B, q1, {{x'y},x,K,L}, -% alpha', B,«c».| +% alpha', B,«c». +% +% Here also we are dividing with x' which could be 10^8 in the exceptional +% case x=99999999. Must intercept it before sending to \XINT_div_mini.| % \begin{macrocode} \def\XINT_div_II_f #1!#2!#3.% {% @@ -17778,7 +17900,7 @@ $1$ or $-1$. }% \def\XINT_div_II_fa #1#2#3#4% {% - \expandafter\XINT_div_II_g \the\numexpr\XINT_div_mini #3.#4!#1{#2}% + \expandafter\XINT_div_II_g \the\numexpr\XINT_div_xmini #3.#4!#1{#2}% }% % \end{macrocode} % \lverb|#1=q, #2=alpha (K+4), #3=B, #4=q1, {{x'y},x,K,L}, alpha', BQ«c» @@ -18024,7 +18146,17 @@ $1$ or $-1$. {% \expandafter\XINT_smalldiv_d\the\numexpr #2-#1*#4!#3.#4!% }% -%%%%%%%%%%%% +% \end{macrocode} +% \lverb|Cette routine fait la division euclidienne d'un nombre de seize +% chiffres par #1 = C = diviseur sur huit chiffres >= 10^7, avec #2 = sa +% moitié utilisée dans \numexpr pour contrebalancer l'arrondi +% (ARRRRRRGGGGGHHHH) fait par /. Le nombre divisé XY = X*10^8+Y se présente +% sous la forme 1<8chiffres>!1<8chiffres>! avec plus significatif en premier. +% +% ATTENTION UNIQUEMENT UTILISÉ POUR DES SITUATIONS OÙ IL EST GARANTI QUE X < C +% !! le quotient euclidien de X*10^8+Y par C sera donc < 10^8. Il sera +% renvoyé sous la forme 1<8chiffres>.| +% \begin{macrocode} \def\XINT_div_mini #1.#2!1#3!% {% \expandafter\XINT_div_mini_a\the\numexpr @@ -18032,8 +18164,8 @@ $1$ or $-1$. }% % \end{macrocode} % \lverb|Note (2015/10/08). Attention à la différence dans l'ordre des -% arguments avec ce que je vois en comparaison avec \XINT_smalldiv_f. Je ne me -% souviens plus du tout s'il y a une raison quelconque.| +% arguments avec ce que je vois en dans \XINT_smalldiv_f. Je ne me souviens +% plus du tout s'il y a une raison quelconque.| % \begin{macrocode} \def\XINT_div_mini_a 1#1#2#3#4#5#6!#7.#8!% {% @@ -18287,7 +18419,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xint}% - [2015/10/19 v1.2a Expandable operations on big integers (jfB)]% + [2015/10/29 v1.2b Expandable operations on big integers (jfB)]% % \end{macrocode} % \subsection{More token management} % \begin{macrocode} @@ -20130,7 +20262,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintbinhex}% - [2015/10/19 v1.2a Expandable binary and hexadecimal conversions (jfB)]% + [2015/10/29 v1.2b Expandable binary and hexadecimal conversions (jfB)]% % \end{macrocode} % \subsection{Constants, etc...} % \lverb!v1.08! @@ -20831,7 +20963,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintgcd}% - [2015/10/19 v1.2a Euclide algorithm with xint package (jfB)]% + [2015/10/29 v1.2b Euclide algorithm with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintGCD}, \csh{xintiiGCD}} % \lverb|The macros of 1.09a benefits from the \xintnum which has been inserted @@ -21533,7 +21665,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintfrac}% - [2015/10/19 v1.2a Expandable operations on fractions (jfB)]% + [2015/10/29 v1.2b Expandable operations on fractions (jfB)]% % \end{macrocode} % \subsection{\csh{XINT_cntSgnFork}} % \lverb|1.09i. Used internally, #1 must expand to \m@ne, \z@, or \@ne or @@ -21646,7 +21778,7 @@ $1$ or $-1$. % format {exponent}{Numerator}{Denominator} where Denominator is at least 1. % % 2015/10/09: this venerable macro from the early days (1.03, 2013/04/14) has -% gotten a lifting for release 1.2. There were two kinds of issues:$newline +% gotten a lifting for release 1.2. There were two kinds of issues: % % 1) use of \W, \Z, \T delimiters was very poor choice as this could clash with % user input, @@ -24922,7 +25054,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintseries}% - [2015/10/19 v1.2a Expandable partial sums with xint package (jfB)]% + [2015/10/29 v1.2b Expandable partial sums with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintSeries}} % \lverb|& @@ -25427,7 +25559,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintcfrac}% - [2015/10/19 v1.2a Expandable continued fractions with xint package (jfB)]% + [2015/10/29 v1.2b Expandable continued fractions with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintCFrac}} % \begin{macrocode} @@ -26556,11 +26688,11 @@ $1$ or $-1$. % Release |1.2| |[2015/10/10]| has the following changes: % \begin{description} % \item[not anymore limited to 5000 -% digits:] |1.2| replaces chains of |\romannumeral`&&@| used earlier to +% digits:] |1.2| replaces chains of |\romannumeral-`0| used earlier to % gather digits by |\csname| governed expansions. The use of % |\csname.=A/B[N]\endcsname| storage has been part of the design from the % start, hence it was very natural and not too hard to gather the number -% directly inside |\csname|. With the chains of |\romannumeral`&&@| gone, +% directly inside |\csname|. With the chains of |\romannumeral-`0| gone, % there is no more a limit at about 5000 (with the standard settings of the % maximal expansion depth at 10000) on the maximal number of digits for each % gathered number. @@ -26575,7 +26707,7 @@ $1$ or $-1$. % \item[isolated dot now illegal:] the decimal mark must have digits either % before or after it, an isolated |.| is now illegal input. % \item[more recognized tokens:] |\ht|, |\dp|, |\wd|, |\fontcharht|, -% |\fontcharwd|, |\fontchardp| and |\fontcharit| are recognized and prefixed +% |\fontcharwd|, |\fontchardp| and |\fontcharic| are recognized and prefixed % with |\number| automatically. % \end{description} % @@ -26726,7 +26858,7 @@ $1$ or $-1$. % \item[{|1.08b [2013/06/14]|}] corrected a problem originating in the attempt % to attribute a special rôle to braces: expansion could be stopped by space % tokens, as various macros tried to expand without grabbing what came next. -% They now have a doubled |\romannumeral`&&@|. +% They now have a doubled |\romannumeral-`0|. % % \item[{|1.09a| |[2013/09/24]|}] has a better mechanism regarding |\xintthe|, % more commenting and better organization of the code, and most importantly it @@ -26852,7 +26984,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintexpr}% - [2015/10/19 v1.2a Expandable expression parser (jfB)]% + [2015/10/29 v1.2b Expandable expression parser (jfB)]% \catcode`! 11 % \end{macrocode} % \subsection{Locking and unlocking} @@ -26951,7 +27083,7 @@ $1$ or $-1$. % % Not to be used as \xintthecoords\xintthefloatexpr, only as % \xintthecoords\xintfloatexpr (or \xintiexpr etc...). Perhaps \xintthecoords -% could make an extra check, but one should not accustome users to too loose +% could make an extra check, but one should not accustom users to too loose % requirements!| % \begin{macrocode} \def\xintthecoords #1{\romannumeral`&&@\expandafter\expandafter\expandafter @@ -29582,8 +29714,8 @@ $1$ or $-1$. % \subsection{\csh{xintNewExpr}, \csh{xintNewIExpr}, \csh{xintNewFloatExpr}, % \csh{xintNewIIExpr}} % \subsubsection{\csh{xintApply::csv}} -% \lverb|Don't ask me what this if for. I wrote it in June, and we are now -% late October.| +% \lverb|Don't ask me what this if for. I wrote it in June 2014, and we are now +% late October 2014.| % \begin{macrocode} \def\xintApply::csv #1#2% {\expandafter\XINT_applyon::_a\expandafter {\romannumeral`&&@#2}{#1}}% @@ -29902,25 +30034,25 @@ $1$ or $-1$. % xint.sty:170 % xintbinhex.sty:69 % xintcfrac.sty:183 -% xintcore.sty:296 +% xintcore.sty:299 % xintexpr.sty:133 % xintfrac.sty:415 % xintgcd.sty:59 % xintkernel.sty:7 % xintseries.sty:48 -% xinttools.sty:112 +% xinttools.sty:128 % % TEMP$ grep -c -e "^}%" *sty % xint.sty:170 % xintbinhex.sty:69 % xintcfrac.sty:183 -% xintcore.sty:296 +% xintcore.sty:299 % xintexpr.sty:163 % xintfrac.sty:415 % xintgcd.sty:61 % xintkernel.sty:8 % xintseries.sty:48 -% xinttools.sty:112 +% xinttools.sty:128 \CharacterTable {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -29937,7 +30069,7 @@ $1$ or $-1$. Right bracket \] Circumflex \^ Underscore \_ Grave accent \` Left brace \{ Vertical bar \| Right brace \} Tilde \~} -\CheckSum {27040}% +\CheckSum {27060}% \makeatletter\check@checksum\makeatother \Finale %% End of file xint.dtx -- cgit v1.2.3