diff options
Diffstat (limited to 'macros/generic/xlop/doc/xlop-doc-fr.tex')
-rw-r--r-- | macros/generic/xlop/doc/xlop-doc-fr.tex | 1953 |
1 files changed, 1042 insertions, 911 deletions
diff --git a/macros/generic/xlop/doc/xlop-doc-fr.tex b/macros/generic/xlop/doc/xlop-doc-fr.tex index 060cde198b..de4a1b7785 100644 --- a/macros/generic/xlop/doc/xlop-doc-fr.tex +++ b/macros/generic/xlop/doc/xlop-doc-fr.tex @@ -1,8 +1,57 @@ \documentclass[12pt]{report} -\usepackage{manual} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{fourier} +\usepackage[scaled]{helvet} +\usepackage[scaled]{luximono} +\usepackage{makeidx} +\usepackage{longtable} +\usepackage{multicol} +\usepackage{pst-node} +\usepackage{fancyvrb-ex} +\usepackage{geometry} +\usepackage{xlop} \usepackage[frenchb]{babel} \usepackage[autolanguage]{numprint} -\fvset{label=source}% français +\usepackage{dcolumn} +\usepackage{hyperref} +\usepackage{microtype} + +\fvset{label=source}% français + +\fvset{xrightmargin=5cm,frame=single,fontsize=\small} +\geometry{a4paper,left=4cm,right=4cm,top=3cm,bottom=3cm,nohead} + +\let\SBSori\SideBySideExample +\def\SideBySideExample{% + \par\bigbreak\SBSori +} +\let\endSBSori\endSideBySideExample +\def\endSideBySideExample{% + \endSBSori + \par\bigskip\noindent} + +\newenvironment{syntaxBNF}{% + \catcode`\_=12 + \def\*##1*{$\langle$##1$\rangle$}% + \def\alt{\unskip~$|$~\ignorespaces}% + \def\sameline{\multicolumn{1}{c}{} & \null\quad}% + \ttfamily + \begin{center}\begin{tabular}{r@{\quad:=\quad}l}} +{\end{tabular}\end{center}} + +\setlongtables +\newcommand\package[1]{\textsf{#1}} +\newcommand\file[1]{\texttt{#1}} + +\newcommand\macro[1]{\texttt{$\backslash$#1}\index{#1@\texttt{\boi {#1}}}} +\newcommand\parameter[1]{\texttt{#1}\index{#1@\texttt{#1}}% + \index{parametre@paramètre!\texttt{#1}}} + +\newcommand\bull{\vrule width3pt height4pt depth-1pt} + +\newcounter{stuff} +\makeindex \begin{document} \begin{titlepage} @@ -25,7 +74,7 @@ \end{center} \vfill \begin{center} - Jean-Côme Charpentier\\ + Jean-Côme Charpentier\\ \today \end{center} \vfill\null\par @@ -36,59 +85,59 @@ \newpage \pagenumbering{arabic} -\chapter{Présentation} -\label{chap:Présentation} -L'extension \package{xlop} a été développée pour permettre de réaliser -automatiquement des calculs arithmétiques sur des nombres de taille -quelconque et d'afficher les résultats sous forme posée ou en -ligne. Voici un premier exemple permettant de donner un aperçu de la +\chapter{Présentation} +\label{chap:Présentation} +L'extension \package{xlop} a été développée pour permettre de réaliser +automatiquement des calculs arithmétiques sur des nombres de taille +quelconque et d'afficher les résultats sous forme posée ou en +ligne. Voici un premier exemple permettant de donner un aperçu de la syntaxe de base : \begin{SideBySideExample} \opadd{45,05}{78,4} \end{SideBySideExample} Ce premier exemple appelle quelques commentaires qui permettront de -donner une idée sur la façon de manipuler l'extension. +donner une idée sur la façon de manipuler l'extension. -L'addition est posée \og comme à l'école \fg{} : il s'agit de la -présentation par défaut. On a un alignement sur la virgule des -opérandes et du résultat, le symbole opératoire placé à gauche est -centrée verticalement entre les deux opérandes et le séparateur -décimal est un point malgré le fait d'avoir indiquer les opérandes +L'addition est posée \og comme à l'école \fg{} : il s'agit de la +présentation par défaut. On a un alignement sur la virgule des +opérandes et du résultat, le symbole opératoire placé à gauche est +centrée verticalement entre les deux opérandes et le séparateur +décimal est un point malgré le fait d'avoir indiquer les opérandes avec une virgule dans l'appel de la macro. Enfin, on notera la -présence d'une retenue au dessus de la première opérande. - -Mis à part l'alignement sur la virgule qui est obligatoire pour -l'addition posée, toutes les autres caractéristiques décrites -ci-dessus sont paramétrables. Certaines macros de l'extension et, en -tout cas, toutes les macros affichant les opérations arithmétiques -admettent un argument optionnel qui permettra de contrôler la -présentation. Pour cela, on utilisera une syntaxe \og à la keyval -\fg{} : on spécifie une suite de modifications de paramètres par une -liste d'affectations séparées par des virgules. Une affectation a +présence d'une retenue au dessus de la première opérande. + +Mis à part l'alignement sur la virgule qui est obligatoire pour +l'addition posée, toutes les autres caractéristiques décrites +ci-dessus sont paramétrables. Certaines macros de l'extension et, en +tout cas, toutes les macros affichant les opérations arithmétiques +admettent un argument optionnel qui permettra de contrôler la +présentation. Pour cela, on utilisera une syntaxe \og à la keyval +\fg{} : on spécifie une suite de modifications de paramètres par une +liste d'affectations séparées par des virgules. Une affectation a une des deux syntaxes possibles ci-dessous : \begin{verbatim} - <paramètres>=<valeur> - <paramètre> + <paramètres>=<valeur> + <paramètre> \end{verbatim} -la seconde possibilité étant en fait un raccourci pour : +la seconde possibilité étant en fait un raccourci pour : \begin{verbatim} - <paramètre>=true + <paramètre>=true \end{verbatim} Dans cette liste d'affectation, on peut faire suivre les virgules par un ou plusieurs espaces mais il ne faut pas mettre d'espace de part et -d'autre du signe égal ou avant la virgule : un paramètre ou une valeur -pouvant (potentiellement) comporter le caractère espace. +d'autre du signe égal ou avant la virgule : un paramètre ou une valeur +pouvant (potentiellement) comporter le caractère espace. -Ainsi, si l'on veut un séparateur décimal qui soit une virgule, un -symbole opératoire placé en face de la seconde opérande et en -supprimant la présence des retenues, il suffit d'indiquer : +Ainsi, si l'on veut un séparateur décimal qui soit une virgule, un +symbole opératoire placé en face de la seconde opérande et en +supprimant la présence des retenues, il suffit d'indiquer : \begin{SideBySideExample} \opadd[decimalsepsymbol={,}, voperator=bottom, carryadd=false]{45.05}{78.4} \end{SideBySideExample} -On notera la petite astuce consistant à mettre la virgule entre -accolades dans la définition du symbole du séparateur décimal. En +On notera la petite astuce consistant à mettre la virgule entre +accolades dans la définition du symbole du séparateur décimal. En effet, la syntaxe : \begin{Verbatim}[xrightmargin=0pt] \opadd[decimalsepsymbol=,,voperator=bottom, @@ -98,12 +147,12 @@ est fautive : \package{xlop} ne comprenant plus trop bien ce qu'est cette \og liste \fg{} ! Un autre point important quoique moins visible, est que les chiffres -sont disposés à des emplacements très précis. Chaque chiffre est placé -dans une boîte de largeur et de hauteur fixes (paramétrables), le -séparateur décimal est, par défaut, placé dans une boîte de largeur -nulle et toutes les lignes sont régulièrement espacées qu'il y ait ou +sont disposés à des emplacements très précis. Chaque chiffre est placé +dans une boîte de largeur et de hauteur fixes (paramétrables), le +séparateur décimal est, par défaut, placé dans une boîte de largeur +nulle et toutes les lignes sont régulièrement espacées qu'il y ait ou non un trait horizontal. Cela permet d'obtenir des alignements -rigoureux et permet également de placer ce que l'on veut à +rigoureux et permet également de placer ce que l'on veut à l'emplacement que l'on veut. \begin{SideBySideExample} \psset{xunit=\opcolumnwidth, @@ -112,28 +161,28 @@ l'emplacement que l'on veut. \oplput(1.5,3){retenue} \psline{->}(1,3.15)(-3.25,3.15) \end{SideBySideExample} -Cet exemple a été réalisé en utilisant l'extension +Cet exemple a été réalisé en utilisant l'extension \package{pstricks}\index{pstricks@\package{pstricks}} -Nous avons dit précédemment que \package{xlop} était capable de +Nous avons dit précédemment que \package{xlop} était capable de manipuler des nombres de taille quelconque. Nous reviendrons plus en -détail sur cette possibilité et nous nous contenterons ici de ne donner +détail sur cette possibilité et nous nous contenterons ici de ne donner qu'un exemple de ce que cela peut offrir. Ne regardez pas trop le -code, les explications seront données plus loin dans ce manuel, pour -l'instant, admirez seulement le résultat ! +code, les explications seront données plus loin dans ce manuel, pour +l'instant, admirez seulement le résultat ! \begin{CenterExample}[xrightmargin=0pt] \opdiv[style=text,period]{1}{49} \end{CenterExample} -L'extension \package{xlop} offre quelques autres fonctionnalités. Il -est ainsi possible de manipuler les nombres par l'intermédiaire de -variables, ces variables pouvant être créées par une assignation -simple ou bien comme résultat d'un calcul. On peut également manipuler -les chiffres de façon individuelle : +L'extension \package{xlop} offre quelques autres fonctionnalités. Il +est ainsi possible de manipuler les nombres par l'intermédiaire de +variables, ces variables pouvant être créées par une assignation +simple ou bien comme résultat d'un calcul. On peut également manipuler +les chiffres de façon individuelle : \begin{SideBySideExample} \opadd*{45.05}{78.4}{r}% - Le premier chiffre après la virgule de - $45.05+78.4$ est un + Le premier chiffre apr\`es la + virgule de $45.05+78.4$ est un \opgetdecimaldigit{r}{1}{d}% $\opprint{d}$. \end{SideBySideExample} @@ -142,18 +191,18 @@ effectuer des tests : \opadd*{45.05}{78.4}{r}% La somme $45.05+78.4$ est \opcmp{r}{100}% - \ifopgt strictement supérieure - \else\ifoplt strictement inférieure - \else égale + \ifopgt strictement sup\'erieure + \else\ifoplt strictement inf\'erieure + \else \'egale \fi\fi - à $100$. + \`a $100$. \end{SideBySideExample} -avoir accès à quelques opérations ou fonctions : +avoir accès à quelques opérations ou fonctions : \begin{SideBySideExample} Le pgcd de $182$ et $442$ est \opgcd{182}{442}{d}$\opprint{d}$ \end{SideBySideExample} -pouvoir réaliser des calculs complexes sous forme infixe : +pouvoir réaliser des calculs complexes sous forme infixe : \begin{SideBySideExample} \opexpr{(2+3^2)/(gcd(22,33))}{r}% $$\frac{2+3^2}{\gcd(22,33)} = @@ -161,31 +210,31 @@ pouvoir réaliser des calculs complexes sous forme infixe : \end{SideBySideExample} \chapter{Instruction \package{xlop}} -\`A quelques exceptions près qui seront étudiées en temps voulu, les -macros de \package{xlop} peuvent éventuellement avoir un argument +\`A quelques exceptions près qui seront étudiées en temps voulu, les +macros de \package{xlop} peuvent éventuellement avoir un argument optionnel entre crochets pour modifier localement la valeur des -paramètres de fonctionnement, les autres arguments (qui sont -obligatoires) étant presque toujours des nombres. Les deux sections de -ce chapitre décrivent en détail ce qu'est un nombre pour -\package{xlop} et comment se servir des paramètres. +paramètres de fonctionnement, les autres arguments (qui sont +obligatoires) étant presque toujours des nombres. Les deux sections de +ce chapitre décrivent en détail ce qu'est un nombre pour +\package{xlop} et comment se servir des paramètres. -\section{Au début était le nombre} -\label{sec:Au début etait le nombre} +\section{Au début était le nombre} +\label{sec:Au début etait le nombre} \subsection{Taille} \label{subsec:Taille} -Avant de voir la syntaxe générale d'un nombre, nous allons nous -pencher sur la particularité de \package{xlop} qui est de pouvoir +Avant de voir la syntaxe générale d'un nombre, nous allons nous +pencher sur la particularité de \package{xlop} qui est de pouvoir manipuler des nombres de taille quelconque. -\index{nombre!taille}Pour être tout à fait précis, la taille théorique +\index{nombre!taille}Pour être tout à fait précis, la taille théorique maximum d'un nombre est de $2^{31}-1$ chiffres\index{nombre!limite}. -En pratique, cette limite ne pourra pas être atteinte pour deux -raisons essentielles. La première est qu'une multiplication avec deux -opérandes ayant $2^{25}$ chiffres demanderait plus de $7\,000$ années +En pratique, cette limite ne pourra pas être atteinte pour deux +raisons essentielles. La première est qu'une multiplication avec deux +opérandes ayant $2^{25}$ chiffres demanderait plus de $7\,000$ années de calcul sur l'ordinateur de l'auteur ! La seconde est beaucoup plus -restrictive car elle est liée aux limites de taille des piles de +restrictive car elle est liée aux limites de taille des piles de \TeX{}. Voici un tableau indiquant une compilation sous \TeX{} avec -une multiplication de deux opérandes de même taille sur une machine +une multiplication de deux opérandes de même taille sur une machine Linux, pentium~II~600 et 256~Mo de RAM : \begin{center} \begin{tabular}{|l|*{6}{c|}} @@ -194,24 +243,24 @@ Linux, pentium~II~600 et 256~Mo de RAM : temps de compilation (s) & 2 & 8 & 18 & 32 & 36 & crash \\\hline \end{tabular} \end{center} -Le \og crash \fg{} indiqué dans le tableau est dû au débordement de la +Le \og crash \fg{} indiqué dans le tableau est dû au débordement de la table de hachage (hash table). \index{hash table}% -\index{depassement de capacite@dépassement de capacité}% -Sous \LaTeX{}, la limite avant crash sera plus réduite. D'autre part, -ces tests ont été effectués sur un fichier minimum : avec un document +\index{depassement de capacite@dépassement de capacité}% +Sous \LaTeX{}, la limite avant crash sera plus réduite. D'autre part, +ces tests ont été effectués sur un fichier minimum : avec un document source classique, cette limite sera un peu plus basse. Une autre -limite qui risque d'être atteinte relativement rapidement est la +limite qui risque d'être atteinte relativement rapidement est la taille du spouleur (spool size). \index{spool size}% Pour composer ce document qui contient un grand nombre d'appel aux -macros de \package{xlop}, l'auteur a augmenté la taille du spouleur -de~$125\,000$ à~$250\,000$ en éditant la ligne \verb+pool_size+ du -fichier \file{texmf.cnf}. De même, la table de hachage a dû être -augmentée en stipulant la valeur \texttt{1000} au niveau de la ligne +macros de \package{xlop}, l'auteur a augmenté la taille du spouleur +de~$125\,000$ à ~$250\,000$ en éditant la ligne \verb+pool_size+ du +fichier \file{texmf.cnf}. De même, la table de hachage a dû être +augmentée en stipulant la valeur \texttt{1000} au niveau de la ligne \verb+hash_extra+ du fichier \file{texmf.cnf}. \subsection{Syntaxe} \label{subsec:Syntaxe} -Nous allons présenter cette syntaxe avec la grammaire BNF mais des +Nous allons présenter cette syntaxe avec la grammaire BNF mais des explications plus humaines suivront : \begin{syntaxBNF} \*nombre* & \{\*signe*\}\*nombre_positif* \alt \*nom* \\ @@ -220,21 +269,21 @@ explications plus humaines suivront : \sameline \*entier*\*sep* \alt \*entier*\*sep*\*entier* \\ \*sep* & . \alt , \\ \*entier* & \*chiffre*\{\*chiffre*\} \\ - \*nom* & \*début*\{caractère\} \\ - \*début* & caractère \textnormal{autre que } \*signe*\textnormal{,} + \*nom* & \*début*\{caractère\} \\ + \*début* & caractère \textnormal{autre que } \*signe*\textnormal{,} \*sep* \\ \sameline \textnormal{et} \*chiffre* \end{syntaxBNF} \index{syntaxe BNF}\index{BNF}\index{grammaire BNF} -Le symbole \texttt{caractère} désigne presque n'importe quel caractère -accepté par \TeX{}. Les seules exceptions sont les caractères \verb+%+, -et \verb+#+ qui sont totalement interdits. En fait, les caractères -actifs risquent de poser des problèmes. Par exemple, la définition de -\verb+~+ sous \LaTeX{} empêche ce caractère de pouvoir faire partie -d'un nom. D'autre part, le caractère \verb+\ +conserve sont rôle de -caractère d'échappement, c'est-à-dire que le nom sera celui obtenu -après développement de la macro introduite. Il n'y a aucune autre +Le symbole \texttt{caractère} désigne presque n'importe quel caractère +accepté par \TeX{}. Les seules exceptions sont les caractères \verb+%+, +et \verb+#+ qui sont totalement interdits. En fait, les caractères +actifs risquent de poser des problèmes. Par exemple, la définition de +\verb+~+ sous \LaTeX{} empêche ce caractère de pouvoir faire partie +d'un nom. D'autre part, le caractère \verb+\ +conserve sont rôle de +caractère d'échappement, c'est-à -dire que le nom sera celui obtenu +après développement de la macro introduite. Il n'y a aucune autre contrainte comme le montre le code suivant : \begin{SideBySideExample} \newcommand\prefix{a/b} @@ -243,83 +292,83 @@ contrainte comme le montre le code suivant : \end{SideBySideExample} \index{nom de nombre}% On notera que \verb+a/b_{^c}!&$+ et \verb+\prefix_{^c}!&$+ -représentent très exactement le même nom, si \verb+\prefix+ a la -définition adéquate évidemment. Cette possibilité d'obtenir un nom en +représentent très exactement le même nom, si \verb+\prefix+ a la +définition adéquate évidemment. Cette possibilité d'obtenir un nom en utilisant des macros peut sembler inutile mais il n'en est rien. On -peut ainsi réaliser des boucles\index{boucle} avec des noms tels que +peut ainsi réaliser des boucles\index{boucle} avec des noms tels que \verb+r1+, \verb+r2+, \ldots, \verb+r<n>+ en utilisant le code -\verb+r\the\cpt+ comme nom où \verb+cpt+ est un compteur au sens -\TeX{}. Le mécanisme des compteurs avec \LaTeX{} donne un code un peu -plus long avec \verb+r\number\value{cpt}+ où \verb+cpt+ est maintenant +\verb+r\the\cpt+ comme nom où \verb+cpt+ est un compteur au sens +\TeX{}. Le mécanisme des compteurs avec \LaTeX{} donne un code un peu +plus long avec \verb+r\number\value{cpt}+ où \verb+cpt+ est maintenant un compteur au sens \LaTeX. Nous verrons un exemple d'utilisation de -cette forme à la section~\ref{sec:Creation d'operations complexes} +cette forme à la section~\ref{sec:Creation d'operations complexes} page~\pageref{sec:Creation d'operations complexes}. -\index{nombre!valide}En pratique, que signifient toutes ces règles ? -Elles indiquent d'abord qu'un nombre écrit sous forme décimale peut -être précédé par n'importe quelle séquence de signes plus et moins. -Évidemment, le nombre sera négatif lorsqu'il y aura un nombre impair +\index{nombre!valide}En pratique, que signifient toutes ces règles ? +Elles indiquent d'abord qu'un nombre écrit sous forme décimale peut +être précédé par n'importe quelle séquence de signes plus et moins. +Évidemment, le nombre sera négatif lorsqu'il y aura un nombre impair de signes moins. Ensuite, un nombre ne peut comporter qu'un seul -séparateur décimal qui peut être le point ou la virgule, celui-ci -pouvant être placé n'importe où dans le nombre. Enfin, l'écriture d'un -nombre s'effectue obligatoirement en base~10. Attention : ces règles -signifient également que \verb+-a+ n'est pas valide. +séparateur décimal qui peut être le point ou la virgule, celui-ci +pouvant être placé n'importe où dans le nombre. Enfin, l'écriture d'un +nombre s'effectue obligatoirement en base~10. Attention : ces règles +signifient également que \verb+-a+ n'est pas valide. -L'extension utilise quelques noms de façon interne et il est plus -prudent de ne pas commencer un nom de variable par le caractère +L'extension utilise quelques noms de façon interne et il est plus +prudent de ne pas commencer un nom de variable par le caractère \texttt{@}. -\section{Paramètres de \package{xlop}} +\section{Paramètres de \package{xlop}} \label{sec:Parametres de xlop} -\index{parametre@paramètre!syntaxe|(} -Les affectations de paramètres restent locales à la macro lorsqu'elles -sont indiquées au niveau de son argument optionnel. Pour rendre de +\index{parametre@paramètre!syntaxe|(} +Les affectations de paramètres restent locales à la macro lorsqu'elles +sont indiquées au niveau de son argument optionnel. Pour rendre de telles affectations globales, il faut utiliser la macro \macro{opset}. Par exemple \begin{Verbatim}[xrightmargin=0pt] \opset{decimalsepsymbol={,}} \end{Verbatim} -fera que le symbole du séparateur décimal sera la virgule pour tout le -reste du document, ou, du moins, jusqu'à une prochaine redéfinition -par la macro \verb+\opset+. Dans ce manuel, ce sera le cas à partir de +fera que le symbole du séparateur décimal sera la virgule pour tout le +reste du document, ou, du moins, jusqu'à une prochaine redéfinition +par la macro \verb+\opset+. Dans ce manuel, ce sera le cas à partir de maintenant.\opset{decimalsepsymbol={,}} \subsection{Symboles} \label{subsecSymboles} -Le paramètre \parameter{afterperiodsymbol} indique le symbole qui suit -l'écriture d'un quotient en ligne lors d'une division avec recherche -de période\index{division!période}. Sa valeur par défaut est +Le paramètre \parameter{afterperiodsymbol} indique le symbole qui suit +l'écriture d'un quotient en ligne lors d'une division avec recherche +de période\index{division!période}. Sa valeur par défaut est \verb+$\ldots$+ -Le paramètre \parameter{equalsymbol} indique le symbole utilisé pour -l'égalité. Sa valeur par défaut est \verb+$=$+. En réalité, le -paramètre est défini avec : +Le paramètre \parameter{equalsymbol} indique le symbole utilisé pour +l'égalité. Sa valeur par défaut est \verb+$=$+. En réalité, le +paramètre est défini avec : \begin{Verbatim}[xrightmargin=0pt] \opset{equalsymbol={$=$}} \end{Verbatim} -c'est-à-dire avec des accolades pour protéger le signe égal. Sans les -accolades, il y aurait une erreur à la compilation. On doit procéder -de cette façon lorsque la valeur comporte le signe égal ou une -virgule\index{parametre@paramètre!avec \og = \fg{} ou \og ,\fg} +c'est-à -dire avec des accolades pour protéger le signe égal. Sans les +accolades, il y aurait une erreur à la compilation. On doit procéder +de cette façon lorsque la valeur comporte le signe égal ou une +virgule\index{parametre@paramètre!avec \og = \fg{} ou \og ,\fg} -Le paramètre \parameter{approxsymbol} indique le symbole utilisé pour -les approximations. Sa valeur par défaut est \verb+$\approx$+. +Le paramètre \parameter{approxsymbol} indique le symbole utilisé pour +les approximations. Sa valeur par défaut est \verb+$\approx$+. -Le paramètre \parameter{decimalsepsymbol} indique le symbole utilisé -pour le séparateur décimal. Sa valeur par défaut est le point. +Le paramètre \parameter{decimalsepsymbol} indique le symbole utilisé +pour le séparateur décimal. Sa valeur par défaut est le point. -Les paramètres \parameter{addsymbol}, \parameter{subsymbol}, +Les paramètres \parameter{addsymbol}, \parameter{subsymbol}, \parameter{mulsymbol} et \parameter{divsymbol} indiquent les symboles -utilisés pour les quatre opérations arithmétiques. Les valeurs par -défaut sont respectivement \verb!$+$!, \verb!$-$!, \verb!$\times$! et +utilisés pour les quatre opérations arithmétiques. Les valeurs par +défaut sont respectivement \verb!$+$!, \verb!$-$!, \verb!$\times$! et \verb!$\div$!. -\subsection{Présentation générale} +\subsection{Présentation générale} \label{subsec:Presentation generale} -Le paramètre \parameter{voperation} indique la façon dont une -opération posée sera placée par rapport à la ligne de base. Les +Le paramètre \parameter{voperation} indique la façon dont une +opération posée sera placée par rapport à la ligne de base. Les valeurs possibles sont \verb+top+, \verb+center+ et \verb+bottom+ -(valeur par défaut). +(valeur par défaut). \begin{SideBySideExample} top\quad \opadd[voperation=top]{45}{172}\par @@ -329,9 +378,9 @@ valeurs possibles sont \verb+top+, \verb+center+ et \verb+bottom+ \opadd[voperation=bottom]{45}{172} \end{SideBySideExample} -Le paramètre \parameter{voperator} indique comment sera placé le -symbole opératoire par rapport aux opérandes. Les valeurs possibles -sont \verb+top+, \verb+center+ (valeur par défaut) et \verb+bottom+. +Le paramètre \parameter{voperator} indique comment sera placé le +symbole opératoire par rapport aux opérandes. Les valeurs possibles +sont \verb+top+, \verb+center+ (valeur par défaut) et \verb+bottom+. \begin{SideBySideExample} top\quad \opadd[voperator=top]{45}{172}\par @@ -341,43 +390,43 @@ sont \verb+top+, \verb+center+ (valeur par défaut) et \verb+bottom+. \opadd[voperator=bottom]{45}{172} \end{SideBySideExample} -Le paramètre \parameter{deletezero} indique si certains nombres d'une -opération doivent être affichés avec ou sans les zéros non -significatifs. Le rôle exact de ce paramètre varie en fonction de -l'opération et nous y reviendrons lors de la présentation des -différentes opérations. +Le paramètre \parameter{deletezero} indique si certains nombres d'une +opération doivent être affichés avec ou sans les zéros non +significatifs. Le rôle exact de ce paramètre varie en fonction de +l'opération et nous y reviendrons lors de la présentation des +différentes opérations. -Le paramètre \parameter{style} indique si l'opération doit être posée -(avec la valeur \verb+display+ qui est la valeur par défaut) ou bien -être affichée en ligne (valeur \verb+text+). On reviendra sur ce -paramètre lors de la présentation de la division car les possibilités +Le paramètre \parameter{style} indique si l'opération doit être posée +(avec la valeur \verb+display+ qui est la valeur par défaut) ou bien +être affichée en ligne (valeur \verb+text+). On reviendra sur ce +paramètre lors de la présentation de la division car les possibilités sont alors un peu plus nombreuses. \begin{SideBySideExample} \opadd[style=text]{45}{172} \end{SideBySideExample} -Dans les opérations en ligne, \package{xlop} fait attention à ne pas -composer la formule en mode mathématique de façon directe. Cela permet -de spécifier ce que l'on veut comme dans l'exemple qui suit et c'est -également pour cela qu'il faut indiquer les valeurs classiques des -symboles entre délimiteurs mathématiques. +Dans les opérations en ligne, \package{xlop} fait attention à ne pas +composer la formule en mode mathématique de façon directe. Cela permet +de spécifier ce que l'on veut comme dans l'exemple qui suit et c'est +également pour cela qu'il faut indiquer les valeurs classiques des +symboles entre délimiteurs mathématiques. \begin{SideBySideExample} \opadd[addsymbol=plus, equalsymbol=\'egal, style=text]{42}{172} \end{SideBySideExample} -Cependant, \package{xlop} introduit exactement les mêmes pénalités de -coupures et exactement les mêmes espacements que pour une formule -mathématique. +Cependant, \package{xlop} introduit exactement les mêmes pénalités de +coupures et exactement les mêmes espacements que pour une formule +mathématique. -Le paramètre \parameter{parenthesisnegative} indique comment composer -les nombres négatifs dans les opérations en ligne. Les valeurs +Le paramètre \parameter{parenthesisnegative} indique comment composer +les nombres négatifs dans les opérations en ligne. Les valeurs possibles sont : \begin{itemize} -\item \texttt{none} qui compose les nombres négatifs sans parenthèse ; -\item \texttt{all} qui compose les nombres négatifs en les plaçant - entre parenthèses ; -\item \texttt{last} qui compose les nombres négatifs en les plaçant - entre parenthèses s'il ne s'agit pas de la première opérande. +\item \texttt{none} qui compose les nombres négatifs sans parenthèse ; +\item \texttt{all} qui compose les nombres négatifs en les plaçant + entre parenthèses ; +\item \texttt{last} qui compose les nombres négatifs en les plaçant + entre parenthèses s'il ne s'agit pas de la première opérande. \end{itemize} \begin{SideBySideExample} \opadd[style=text, @@ -393,76 +442,76 @@ possibles sont : \subsection{Dimensions} \label{subsec:Dimensions} -Dans les opérations posées, les chiffres sont placés dans des boîtes -de dimensions fixées. La largeur est donnée par le paramètre -\parameter{columnwidth} et la hauteur par le paramètre -\parameter{lineheight}. La valeur par défaut du paramètre +Dans les opérations posées, les chiffres sont placés dans des boîtes +de dimensions fixées. La largeur est donnée par le paramètre +\parameter{columnwidth} et la hauteur par le paramètre +\parameter{lineheight}. La valeur par défaut du paramètre \texttt{lineheight} est \verb+\baselineskip+ ce qui fait que les -lignes des opérations seront espacées, par défaut, comme les lignes -d'un paragraphe. La valeur par défaut de \texttt{columnwidth} est de +lignes des opérations seront espacées, par défaut, comme les lignes +d'un paragraphe. La valeur par défaut de \texttt{columnwidth} est de \texttt{2ex} car la largeur \og normale \fg{} des chiffres aurait -donné des résultats peu lisibles. +donné des résultats peu lisibles. \begin{SideBySideExample} \opadd[columnwidth=0.5em] {45.89}{127.5} \end{SideBySideExample} -Ce piètre résultat est dû en partie au fait que la virgule est placé -dans une boîte dont la largeur est contrôlée par le paramètre -\parameter{decimalsepwidth} dont la valeur par défaut est nulle. Un -essai d'amélioration peut être effectué en donnant à ce paramètre la +Ce piètre résultat est dû en partie au fait que la virgule est placé +dans une boîte dont la largeur est contrôlée par le paramètre +\parameter{decimalsepwidth} dont la valeur par défaut est nulle. Un +essai d'amélioration peut être effectué en donnant à ce paramètre la largeur \og{} normale \fg d'une virgule. \begin{SideBySideExample} \opadd[columnwidth=0.5em, decimalsepwidth=0.27778em] {45.89}{127.5} \end{SideBySideExample} -C'est meilleur mais le fait de donner une largeur non nulle à la boîte -contenant le séparateur décimal risque de poser des difficultés si -l'on veut placer des éléments externes : cela va à l'encontre de -l'idée de placer les chiffres dans une grille fixe. Ceci est donc à -éviter en temps normal. +C'est meilleur mais le fait de donner une largeur non nulle à la boîte +contenant le séparateur décimal risque de poser des difficultés si +l'on veut placer des éléments externes : cela va à l'encontre de +l'idée de placer les chiffres dans une grille fixe. Ceci est donc à +éviter en temps normal. -Les deux paramètres \parameter{columnwidth} et \parameter{lineheight} +Les deux paramètres \parameter{columnwidth} et \parameter{lineheight} correspondent aux deux seules dimensions que l'extension rend -publiques, à savoir respectivement +publiques, à savoir respectivement \verb+\opcolumnwidth+\index{opcolumnwidth@\texttt{$\backslash$opcolumnwidth}} et \verb+\oplineheight+\index{oplineheight@\texttt{$\backslash$oplineheight}}. -Il est cependant dangereux de vouloir modifier ces dimensions de façon +Il est cependant dangereux de vouloir modifier ces dimensions de façon directe puisque une modification par voie normale n'a pas pour seule -conséquence d'obtenir une nouvelle valeur pour ces +conséquence d'obtenir une nouvelle valeur pour ces dimensions. L'extension \package{xlop} a rendu ces dimensions publiques uniquement pour pouvoir les lire, pas pour les modifier. -Les deux paramètres suivants permettent de spécifier les largeurs des -traits horizontaux et verticaux tracés par \package{xlop}. Il s'agit -des deux paramètres \parameter{hrulewidth} et \parameter{vrulewidth} -dont la valeur par défaut est \texttt{0.4pt}. +Les deux paramètres suivants permettent de spécifier les largeurs des +traits horizontaux et verticaux tracés par \package{xlop}. Il s'agit +des deux paramètres \parameter{hrulewidth} et \parameter{vrulewidth} +dont la valeur par défaut est \texttt{0.4pt}. -Ces traits sont composés sans perturber la grille, c'est-à-dire sans +Ces traits sont composés sans perturber la grille, c'est-à -dire sans ajouter d'espace vertical. Ainsi, avec des valeurs importantes pour -l'épaisseur, les traits risquent de déborder au niveau des opérandes. +l'épaisseur, les traits risquent de déborder au niveau des opérandes. \begin{SideBySideExample} \opadd[hrulewidth=8pt]{42}{172} \end{SideBySideExample} -Il existe également un paramètre permettant de contrôler le décalage -horizontal du séparateur décimal. Il s'agit de -\parameter{decimalsepoffset} dont la valeur par défaut est égale -à~\texttt{-0.35}. Cette valeur par défaut indique une longueur en -prenant \verb+\opcolumnwidth+ comme unité. Un exemple d'utilisation de -ce paramètre sera donné à la section~\ref{sec:Division} +Il existe également un paramètre permettant de contrôler le décalage +horizontal du séparateur décimal. Il s'agit de +\parameter{decimalsepoffset} dont la valeur par défaut est égale +à ~\texttt{-0.35}. Cette valeur par défaut indique une longueur en +prenant \verb+\opcolumnwidth+ comme unité. Un exemple d'utilisation de +ce paramètre sera donné à la section~\ref{sec:Division} page~\pageref{sec:Division}. \subsection{Styles des chiffres} \label{subsec:Styles des chiffres} L'extension \package{xlop} distingue cinq types de nombres et y -associe cinq paramètres de style : +associe cinq paramètres de style : \begin{itemize} -\item les opérandes avec \parameter{operandstyle} ; -\item le résultat avec \parameter{resultstyle} ; +\item les opérandes avec \parameter{operandstyle} ; +\item le résultat avec \parameter{resultstyle} ; \item les restes avec \parameter{remainderstyle} ; -\item les résultats intermédiaires avec \parameter{intermediarystyle} +\item les résultats intermédiaires avec \parameter{intermediarystyle} ; \item les retenues avec \parameter{carrystyle}. \end{itemize} @@ -475,12 +524,12 @@ associe cinq paramètres de style : Rappelons que dans ce manuel, nous utilisons l'extension \package{pstricks}\index{pstricks}. -\index{parametre@paramètre!indexé|(}% -En réalité, la gestion de ces styles est encore plus puissante car on -peut distinguer les différents nombres d'une même classe. Dans une -même opération, on a plusieurs opérandes et, éventuellement plusieurs -restes et plusieurs nombres intermédiaires. On accède alors au style -de ces nombres individuels en indexant le paramètre de style +\index{parametre@paramètre!indexé|(}% +En réalité, la gestion de ces styles est encore plus puissante car on +peut distinguer les différents nombres d'une même classe. Dans une +même opération, on a plusieurs opérandes et, éventuellement plusieurs +restes et plusieurs nombres intermédiaires. On accède alors au style +de ces nombres individuels en indexant le paramètre de style correspondant. \begin{SideBySideExample} \opadd[operandstyle=\blue, @@ -489,20 +538,20 @@ correspondant. carrystyle=\scriptsize\green] {45.89}{127.5} \end{SideBySideExample} -Sur cet exemple, on a indiqué que la première opérande devait être -composée avec le style \verb+\lightgray+ et comme rien n'était indiqué -pour la seconde opérande, celle-ci a repris le style de base de sa -classe (donc a été composée avec le style \verb+\blue+). +Sur cet exemple, on a indiqué que la première opérande devait être +composée avec le style \verb+\lightgray+ et comme rien n'était indiqué +pour la seconde opérande, celle-ci a repris le style de base de sa +classe (donc a été composée avec le style \verb+\blue+). -Ce mécanisme va encore plus loin car on peut indicer à deux niveaux -les styles des classes opérande, reste et nombre intermédiaire et à un -niveau les styles des classes résultat et retenue pour accéder au +Ce mécanisme va encore plus loin car on peut indicer à deux niveaux +les styles des classes opérande, reste et nombre intermédiaire et à un +niveau les styles des classes résultat et retenue pour accéder au style de chacun des chiffres de ces nombres. Afin de rendre les -indexations plus facile à gérer, un index positif indiquera le rang -d'un chiffre de la partie entière (numérotée de droite à gauche, -l'index~1 correspondant au chiffre des unités) et un index négatif -indiquera le rang d'un chiffre de la partie décimale (numérotée de -gauche à droite, l'index $-1$ correspondant au chiffre des dixièmes). +indexations plus facile à gérer, un index positif indiquera le rang +d'un chiffre de la partie entière (numérotée de droite à gauche, +l'index~1 correspondant au chiffre des unités) et un index négatif +indiquera le rang d'un chiffre de la partie décimale (numérotée de +gauche à droite, l'index $-1$ correspondant au chiffre des dixièmes). \begin{SideBySideExample} \opadd[operandstyle.1.1=\white, operandstyle.1.-2=\white, @@ -511,7 +560,7 @@ gauche à droite, l'index $-1$ correspondant au chiffre des dixièmes). deletezero=false] {045.89}{127.50} \end{SideBySideExample} -On peut également utiliser une macro à un paramètre comme style. +On peut également utiliser une macro à un paramètre comme style. \begin{SideBySideExample} \newcommand\hole[1]{$\bullet$} \opadd[operandstyle.1.1=\hole, @@ -520,9 +569,9 @@ On peut également utiliser une macro à un paramètre comme style. resultstyle.2=\hole] {45.89}{127.5} \end{SideBySideExample} -\index{operation@opération!à trou}% +\index{operation@opération!à trou}% Lorsque le style est une macro, le chiffre constitue le dernier -argument de cette macro. Voici un exemple plus compliqué et utilisant +argument de cette macro. Voici un exemple plus compliqué et utilisant l'extension \package{pst-node} de la suite \package{pstricks} : \begin{SideBySideExample} \newcommand\OPoval[3]{% @@ -541,59 +590,59 @@ l'extension \package{pst-node} de la suite \package{pstricks} : \end{minipage} \end{SideBySideExample} -Comme les chiffres, le séparateur décimal tient compte du style d'un -nombre. Pour accéder au style du séparateur décimal de façon +Comme les chiffres, le séparateur décimal tient compte du style d'un +nombre. Pour accéder au style du séparateur décimal de façon individuelle, il faut employer l'indice \texttt{d} au lieu des indices -numériques des chiffres. +numériques des chiffres. \begin{SideBySideExample} \newcommand\hole[1]{\texttt{\_}} \opmul[intermediarystyle=\hole, resultstyle=\hole, resultstyle.d=\white]{2.46}{35.7} \end{SideBySideExample} -\index{parametre@paramètre!indexé|)}% -\index{parametre@paramètre!syntaxe|)} +\index{parametre@paramètre!indexé|)}% +\index{parametre@paramètre!syntaxe|)} -\chapter{Opérations arithmétiques} -\label{chap:Opérations arithmétiques} +\chapter{Opérations arithmétiques} +\label{chap:Opérations arithmétiques} \section{Addition} \label{sec:Addition} -L'addition est gérée par la macro \macro{opadd}. L'addition, -lorsqu'elle est posée, n'affiche que des nombres positifs. Cela va -avoir comme conséquence d'afficher une soustraction lorsqu'une des -opérandes est négative.% -\index{nombre!négatifs dans une opération posée} +L'addition est gérée par la macro \macro{opadd}. L'addition, +lorsqu'elle est posée, n'affiche que des nombres positifs. Cela va +avoir comme conséquence d'afficher une soustraction lorsqu'une des +opérandes est négative.% +\index{nombre!négatifs dans une opération posée} \begin{SideBySideExample} \opadd{-245}{72} \end{SideBySideExample} -De façon générale, le principe est de poser l'opération qui permet de -retrouver le résultat comme on le ferait à la main. En revanche, +De façon générale, le principe est de poser l'opération qui permet de +retrouver le résultat comme on le ferait à la main. En revanche, l'affichage en ligne donnera toujours une addition puisqu'on peut -maintenant écrire des nombres négatifs. +maintenant écrire des nombres négatifs. \begin{SideBySideExample} \opadd[style=text]{-245}{72} \end{SideBySideExample} - Outre les paramètres généraux décrits à la + Outre les paramètres généraux décrits à la section~\ref{sec:Parametres de xlop}, la macro \verb+\opadd+ est - sensible aux paramètres \texttt{carryadd}, \texttt{lastcarry} et + sensible aux paramètres \texttt{carryadd}, \texttt{lastcarry} et \texttt{deletezero}. -Le paramètre \parameter{carryadd} est un paramètre -booléen\index{parametre@paramètre!booléen} c'est-à-dire n'acceptant +Le paramètre \parameter{carryadd} est un paramètre +booléen\index{parametre@paramètre!booléen} c'est-à -dire n'acceptant que les valeurs \texttt{true} et \texttt{false}. Comme il d'usage, -l'omission du signe égal et de la partie droite de l'affectation -équivaut à \texttt{=true}. Ce paramètre indique si les retenues -doivent être ou non affichées. Sa valeur par défaut est +l'omission du signe égal et de la partie droite de l'affectation +équivaut à \texttt{=true}. Ce paramètre indique si les retenues +doivent être ou non affichées. Sa valeur par défaut est \texttt{true}. -Le paramètre \parameter{lastcarry} est également un paramètre -booléen. Il indique si une retenue sans chiffre correspondant au -niveau des deux opérandes doit être ou non affichée. Sa valeur par -défaut est \texttt{false}. On fera attention au rôle exact de ce -paramètre. Ainsi, si la seconde opérande dans l'exemple qui suit avait -été~15307, la dernière retenue aurait été affichée quelle que soit la -valeur du paramètre \texttt{lastcarry} puisqu'il y aurait eu un -chiffre correspondant au niveau de la seconde opérande. +Le paramètre \parameter{lastcarry} est également un paramètre +booléen. Il indique si une retenue sans chiffre correspondant au +niveau des deux opérandes doit être ou non affichée. Sa valeur par +défaut est \texttt{false}. On fera attention au rôle exact de ce +paramètre. Ainsi, si la seconde opérande dans l'exemple qui suit avait +été~15307, la dernière retenue aurait été affichée quelle que soit la +valeur du paramètre \texttt{lastcarry} puisqu'il y aurait eu un +chiffre correspondant au niveau de la seconde opérande. \begin{SideBySideExample} \opadd{4825}{5307} \end{SideBySideExample} @@ -604,83 +653,150 @@ chiffre correspondant au niveau de la seconde opérande. \opadd[lastcarry]{4825}{5307} \end{SideBySideExample} -Le paramètre \parameter{deletezero} est également un paramètre booléen -et son rôle et d'indiquer si les zéros non significatifs doivent être -supprimés ou non. Sa valeur par défaut est \texttt{true}. Si ce -paramètre vaut \texttt{false}, les opérandes et le résultats auront le -même nombre de chiffres, \package{xlop} ajoutant des zéros non -significatifs pour y parvenir. Les zéros non significatifs des -opérandes ne sont pas supprimés également. +Le paramètre \parameter{deletezero} est également un paramètre booléen +et son rôle et d'indiquer si les zéros non significatifs doivent être +supprimés ou non. Sa valeur par défaut est \texttt{true}. Si ce +paramètre vaut \texttt{false}, les opérandes et le résultats auront le +même nombre de chiffres, \package{xlop} ajoutant des zéros non +significatifs pour y parvenir. Les zéros non significatifs des +opérandes ne sont pas supprimés également. \begin{SideBySideExample} \opadd{012.3427}{5.2773}\par \opadd[deletezero=false] {012.3427}{5.2773} \end{SideBySideExample} -Ce paramètre a exactement le même rôle dans l'affichage en ligne que -dans l'affichage posé. +Ce paramètre a exactement le même rôle dans l'affichage en ligne que +dans l'affichage posé. \begin{SideBySideExample} \opadd[style=text]{02.8}{1.2}\par \opadd[style=text, - deletezero=false]{02.8}{1.2}\par + deletezero=false]{02.8}{1.2} +\end{SideBySideExample} + +La version 0.27 de xlop a introduit la macro \macro{opmanyyadd} qui +permet de poser des additions avec plus de deux opérandes. Cette macro +a quelques limitations: +\begin{itemize} +\item toutes les opérandes doivent être positives ; +\item certains paramètres ne sont plus utilisés, par + exemple \parameter{style} ; +\item les retenues ne sont pas affichées. +\end{itemize} +En revanche, le paramètre \parameter{vmanyoperator} permet de +contrôler finement le placement des signes d'opération. + +Voici un premier exemple pour montrer la syntaxe de base. Les +opérandes doivent être placées entre accolades et leur nombre n'est +pas limité. +\begin{SideBySideExample} + \opmanyadd{123.4}{3.1416} + {2.71828}{0.001} +\end{SideBySideExample} +La macro \macro{opmanyadd} accepte les paramètres de style pour les +opérandes et le résultat. En ce qui concerne le style pour les +opérandes, le premier index indique la place de l'opérande (du haut +vers le bas) et la deuxième le chiffre de l'opérande. Par exemple : +\begin{SideBySideExample} + \newcommand\R{\color{red}} + \opmanyadd[operandstyle.2.3=\R, + operandstyle.3.3=\R, + resultstyle.3=\R, + resultstyle.4=\R] + {12.6}{853.3}{158.1} \end{SideBySideExample} +Cet exemple montre que les zéros non significatifs ne sont pas +affichés. Ils peuvent l'être en utilisant le +paramètre \parameter{deletezero} avec se valeur false : +\begin{SideBySideExample} + \opmanyadd[deletezero=false] + {12.6}{853.3}{158.1} +\end{SideBySideExample} + +La macro \macro{opmanyadd} utilise également le +paramètre \parameter{voperation} comme le fait \macro{opadd}. + +Il existe un paramètre spécifique à la macro \macro{opmanyadd} : le +paramètre \parameter{vmanyoperator}. Ce paramètre permet d'afficher +l'opérateur plus de six façons différentes. +\begin{CenterExample} + \opmanyadd{1}{12}{123}{1234}\quad + \opmanyadd[vmanyoperator=center] + {1}{12}{123}{1234}\quad + \opmanyadd[vmanyoperator=top] + {1}{12}{123}{1234}\quad + \opmanyadd[vmanyoperator=bottom] + {1}{12}{123}{1234} +\end{CenterExample} +On peut voir que la valeur par défaut est center. Les valeurs avec une +première lettre minuscule affichent autant d'opérateurs qu'il y a +d'opérandes moins une. Les mêmes valeurs avec la premiyère lettre en +capitale affichent un unique signe opératoire: +\begin{CenterExample} + \opmanyadd[vmanyoperator=Center] + {1}{12}{123}{1234}\quad + \opmanyadd[vmanyoperator=Top] + {1}{12}{123}{1234}\quad + \opmanyadd[vmanyoperator=Bottom] + {1}{12}{123}{1234} +\end{CenterExample} \section{Soustraction} \label{sec:soustraction} -La soustraction est gérée par la macro \macro{opsub}. La soustraction, -lorsqu'elle est posée, n'affiche que des nombres positifs. Par -conséquence cette macro va afficher une addition lorsqu'une des -opérandes est négative. +La soustraction est gérée par la macro \macro{opsub}. La soustraction, +lorsqu'elle est posée, n'affiche que des nombres positifs. Par +conséquence cette macro va afficher une addition lorsqu'une des +opérandes est négative. \begin{SideBySideExample} \opsub{-245}{72} \end{SideBySideExample} -De façon générale, le principe est de poser l'opération qui permet de -retrouver le résultat comme on le ferait à la main. En revanche, +De façon générale, le principe est de poser l'opération qui permet de +retrouver le résultat comme on le ferait à la main. En revanche, l'affichage en ligne donnera toujours une soustraction puisqu'on peut -maintenant écrire des nombres négatifs. +maintenant écrire des nombres négatifs. \begin{SideBySideExample} \opsub[style=text]{-245}{72} \end{SideBySideExample} -Ce principe s'applique également lorsque la première opérande est -inférieure à la seconde (cas positif) où on aura une inversion des -opérandes. +Ce principe s'applique également lorsque la première opérande est +inférieure à la seconde (cas positif) où on aura une inversion des +opérandes. \begin{SideBySideExample} \opsub{1.2}{2.45} \end{SideBySideExample} -Bien entendu, l'opération en ligne donnera le résultat exact. +Bien entendu, l'opération en ligne donnera le résultat exact. \begin{SideBySideExample} \opsub[style=text]{1.2}{2.45} \end{SideBySideExample} -Outre les paramètres généraux vus à la section~\ref{sec:Parametres de - xlop}, \verb+\opsub+ est sensible à \texttt{carrysub}, +Outre les paramètres généraux vus à la section~\ref{sec:Parametres de + xlop}, \verb+\opsub+ est sensible à \texttt{carrysub}, \texttt{lastcarry}, \texttt{offsetcarry}, \texttt{deletezero} et \texttt{behaviorsub}. -Le paramètre \parameter{carrysub} est un paramètre booléen -qui indique si les retenues doivent être ou non présentes. Sa valeur -par défaut est \texttt{false} (rappelons que le paramètre -\texttt{carryadd} avait une valeur par défaut égale à \texttt{true}). +Le paramètre \parameter{carrysub} est un paramètre booléen +qui indique si les retenues doivent être ou non présentes. Sa valeur +par défaut est \texttt{false} (rappelons que le paramètre +\texttt{carryadd} avait une valeur par défaut égale à \texttt{true}). \begin{SideBySideExample} \opsub[carrysub]{1234}{567} \end{SideBySideExample} -Dans l'exemple précédent, nous pouvons voir qu'il manque en fait une -retenue au niveau du dernier chiffre de 1234, cette façon de faire -étant assez courante. Néanmoins, on peut contrôler l'affichage de -cette dernière retenue avec le paramètre \parameter{lastcarry}. Ce -paramètre n'a pas tout à fait le même rôle que pour l'addition puisque -la dernière retenue ne sera pas affichée dans le cas où la seconde -opérande n'a pas de chiffre correspondant (alors que pour l'addition, -il fallait que les deux opérandes n'aient pas de chiffres +Dans l'exemple précédent, nous pouvons voir qu'il manque en fait une +retenue au niveau du dernier chiffre de 1234, cette façon de faire +étant assez courante. Néanmoins, on peut contrôler l'affichage de +cette dernière retenue avec le paramètre \parameter{lastcarry}. Ce +paramètre n'a pas tout à fait le même rôle que pour l'addition puisque +la dernière retenue ne sera pas affichée dans le cas où la seconde +opérande n'a pas de chiffre correspondant (alors que pour l'addition, +il fallait que les deux opérandes n'aient pas de chiffres correspondant). \begin{SideBySideExample} \opsub[carrysub,lastcarry]{1234}{567} \end{SideBySideExample} -On peut noter dans ce dernier cas qu'il est sans doute préférable de -mettre le paramètre \parameter{deletezero} à \texttt{false} pour -obtenir une présentation plus correcte. +On peut noter dans ce dernier cas qu'il est sans doute préférable de +mettre le paramètre \parameter{deletezero} à \texttt{false} pour +obtenir une présentation plus correcte. \begin{SideBySideExample} \opsub[carrysub, lastcarry, @@ -688,10 +804,10 @@ obtenir une présentation plus correcte. \end{SideBySideExample} L'affichage des retenues au niveau des soustractions peut sembler un -peu trop compact. On peut élargir la boîte des chiffres avec le -paramètre \parameter{opcolumnwidth} mais également indiquer le -décalage des retenues avec le paramètre \parameter{offsetcarry}. La -valeur par défaut de ce paramètre est \texttt{-0.35}. +peu trop compact. On peut élargir la boîte des chiffres avec le +paramètre \parameter{opcolumnwidth} mais également indiquer le +décalage des retenues avec le paramètre \parameter{offsetcarry}. La +valeur par défaut de ce paramètre est \texttt{-0.35}. \begin{SideBySideExample} \opsub[carrysub, lastcarry, @@ -707,12 +823,12 @@ valeur par défaut de ce paramètre est \texttt{-0.35}. \end{SideBySideExample} Il peut arriver qu'une soustraction de deux nombres positifs, le -premier étant inférieur au second, soit le signe d'une erreur de -l'utilisateur. Dans ce cas, et uniquement dans ce cas, le paramètre -\parameter{behaviorsub} permet d'obtenir un rappel à l'ordre. Les -trois valeurs possibles de ce paramètre sont \texttt{silent} qui est -la valeur par défaut et qui donne le résultat, \texttt{warning} qui -donne également le résultat mais affiche le message d'avertissement : +premier étant inférieur au second, soit le signe d'une erreur de +l'utilisateur. Dans ce cas, et uniquement dans ce cas, le paramètre +\parameter{behaviorsub} permet d'obtenir un rappel à l'ordre. Les +trois valeurs possibles de ce paramètre sont \texttt{silent} qui est +la valeur par défaut et qui donne le résultat, \texttt{warning} qui +donne également le résultat mais affiche le message d'avertissement : \begin{Verbatim}[xrightmargin=0pt,frame=none] xlop warning. Substraction with first operand less than second one See documentation for further information. @@ -723,75 +839,75 @@ et enfin \texttt{error} qui affichera le message d'erreur : Type H <return> for immediate help. ! Substraction with first operand less than second one. \end{Verbatim} -et l'opération ne sera pas effectuée. +et l'opération ne sera pas effectuée. \section{Multiplication} \label{sec:Multiplication} -La multiplication est gérée par la macro \macro{opmul}. -Nous présenterons les paramètres \texttt{hfactor}, +La multiplication est gérée par la macro \macro{opmul}. +Nous présenterons les paramètres \texttt{hfactor}, \texttt{displayintermediary}, \texttt{shiftintermediarysymbol}, \texttt{displayshiftintermediary} et finalement \texttt{deletezero}, -les autres paramètres ayant été vus à la section~\ref{sec:Parametres +les autres paramètres ayant été vus à la section~\ref{sec:Parametres de xlop}. -Le paramètre \parameter{shiftintermediarysymbol} indique quel symbole -sera utilisé (sa valeur par défaut est \verb+$\cdot$+) pour visualiser -les décalages des nombres intermédiaires. Le paramètre +Le paramètre \parameter{shiftintermediarysymbol} indique quel symbole +sera utilisé (sa valeur par défaut est \verb+$\cdot$+) pour visualiser +les décalages des nombres intermédiaires. Le paramètre \parameter{displayshiftintermediary} peut prendre les valeurs -\texttt{shift} (valeur par défaut) qui ne montre ce symbole que -lorsque le décalage est supérieur à un rang, \texttt{all} qui indique -que ce symbole de décalage sera systématiquement affiché et -\texttt{none} qui indique que ce symbole ne sera jamais affiché. +\texttt{shift} (valeur par défaut) qui ne montre ce symbole que +lorsque le décalage est supérieur à un rang, \texttt{all} qui indique +que ce symbole de décalage sera systématiquement affiché et +\texttt{none} qui indique que ce symbole ne sera jamais affiché. \begin{CenterExample}[xrightmargin=0pt] \opmul[displayshiftintermediary=shift]{453}{1001205}\qquad \opmul[displayshiftintermediary=all]{453}{1001205}\qquad \opmul[displayshiftintermediary=none]{453}{1001205} \end{CenterExample} -En réalité, le non affichage des nombres intermédiaires nuls est dû à -la valeur par défaut \texttt{none} du paramètre +En réalité, le non affichage des nombres intermédiaires nuls est dû à +la valeur par défaut \texttt{none} du paramètre \parameter{displayintermediary}. La valeur \texttt{all} va afficher -tous les nombres intermédiaires. +tous les nombres intermédiaires. \begin{SideBySideExample} \opmul[displayintermediary=all] {453}{1001205} \end{SideBySideExample} -On notera que les nombres intermédiaires nuls sont affichés avec +On notera que les nombres intermédiaires nuls sont affichés avec autant de chiffres que le premier facteur. -Le paramètre \parameter{displayintermediary} admet la valeur -\texttt{nonzero} qui a le même rôle que la valeur \texttt{none} sauf -dans le cas où le second facteur ne comporte qu'un seul chiffre. +Le paramètre \parameter{displayintermediary} admet la valeur +\texttt{nonzero} qui a le même rôle que la valeur \texttt{none} sauf +dans le cas où le second facteur ne comporte qu'un seul chiffre. \begin{CenterExample}[xrightmargin=0pt] \opmul{3.14159}{4}\qquad \opmul[displayintermediary=nonzero]{3.14159}{4} \end{CenterExample} -Enfin, le paramètre \parameter{displayintermediary} admet la valeur -\texttt{None} qui n'affichera aucun résultat intermédiaire dans tous +Enfin, le paramètre \parameter{displayintermediary} admet la valeur +\texttt{None} qui n'affichera aucun résultat intermédiaire dans tous les cas. \begin{CenterExample}[xrightmargin=0pt] \opmul[displayintermediary=None]{453}{1001205} \end{CenterExample} -Le paramètre \parameter{hfactor} permet d'indiquer comment doit se -faire l'alignement des opérandes. La valeur par défaut \texttt{right} -donne une composition au fer à droite tandis que la valeur +Le paramètre \parameter{hfactor} permet d'indiquer comment doit se +faire l'alignement des opérandes. La valeur par défaut \texttt{right} +donne une composition au fer à droite tandis que la valeur \texttt{decimal} donne un alignement au niveau de la virgule. \begin{CenterExample}[xrightmargin=0pt] \opmul{3.1416}{12.8}\qquad\opmul[hfactor=decimal]{3.1416}{12.8} \end{CenterExample} -Pour la multiplication posée, le paramètre \parameter{deletezero} ne -concerne que les opérandes, le résultat gardant ses éventuels zéros -non significatifs puisque ceux-ci sont nécessaires pour effectuer -correctement le décalage de la virgule lorsqu'on travaille \og à la +Pour la multiplication posée, le paramètre \parameter{deletezero} ne +concerne que les opérandes, le résultat gardant ses éventuels zéros +non significatifs puisque ceux-ci sont nécessaires pour effectuer +correctement le décalage de la virgule lorsqu'on travaille \og à la main \fg{}. \begin{CenterExample}[xrightmargin=0pt] \opmul[deletezero=false]{01.44}{25}\qquad \opmul{01.44}{25} \end{CenterExample} -En revanche, dans la multiplication en ligne, ce paramètre retrouve +En revanche, dans la multiplication en ligne, ce paramètre retrouve son comportement normal. \begin{CenterExample}[xrightmargin=0pt] \opmul[deletezero=false,style=text]{01.44}{25}\qquad @@ -800,41 +916,41 @@ son comportement normal. \section{Division} \label{sec:Division} -L'extension gère la division \og classique \fg{} avec la macro +L'extension gère la division \og classique \fg{} avec la macro \macro{opdiv} et la division euclidienne avec la macro -\macro{opidiv}. En raison de sa complexité, la division est l'opération -qui prend en compte le plus de paramètres. +\macro{opidiv}. En raison de sa complexité, la division est l'opération +qui prend en compte le plus de paramètres. -\subsection{Contrôle de l'arrêt} +\subsection{Contrôle de l'arrêt} \label{subsec:Controle de l'arret} -Dans ce qui suivra, le terme d'\emph{étape} indique l'ensemble des +Dans ce qui suivra, le terme d'\emph{étape} indique l'ensemble des calculs permettant d'obtenir un chiffre au niveau du quotient. Ce -nombre d'étapes est contrôlé en partie par les paramètres +nombre d'étapes est contrôlé en partie par les paramètres \parameter{maxdivstep}, \parameter{safedivstep} et \parameter{period}. -En partie seulement car une division classique s'arrêtera +En partie seulement car une division classique s'arrêtera automatiquement lors de l'obtention d'un reste nul, quelles que que -soient les valeurs de ces trois paramètres et une division euclidienne -s'arrêtera sur un quotient entier, sans tenir compte de ces trois -paramètres. +soient les valeurs de ces trois paramètres et une division euclidienne +s'arrêtera sur un quotient entier, sans tenir compte de ces trois +paramètres. \begin{SideBySideExample} \opdiv{25}{7} \end{SideBySideExample} \begin{SideBySideExample} \opidiv{25}{7} \end{SideBySideExample} -Le premier exemple s'arrête en raison de la valeur de -\parameter{maxdivstep} qui est égale, par défaut, à~10. On prendra -garde à ce que le nombre maximum d'étapes peut entraîner des résultats +Le premier exemple s'arrête en raison de la valeur de +\parameter{maxdivstep} qui est égale, par défaut, à ~10. On prendra +garde à ce que le nombre maximum d'étapes peut entraîner des résultats aberrants lorsqu'il est trop faible. \begin{SideBySideExample} \opdiv[maxdivstep=2]{1248}{3} \end{SideBySideExample} -Le résultat précédent est clairement faux mais \package{xlop} a fait -ce qu'on lui a demandé, en l'occurrence avoir deux chiffres (maximum) +Le résultat précédent est clairement faux mais \package{xlop} a fait +ce qu'on lui a demandé, en l'occurrence avoir deux chiffres (maximum) au quotient. -L'affichage en ligne va également différer selon que la division s'est -arrêtée avec un reste final nul ou non ou selon qu'il s'agit d'une +L'affichage en ligne va également différer selon que la division s'est +arrêtée avec un reste final nul ou non ou selon qu'il s'agit d'une division classique ou euclidienne. \begin{SideBySideExample} \opdiv[style=text]{3.14}{2}\par @@ -845,46 +961,46 @@ division classique ou euclidienne. On notera l'emploi de \parameter{equalsymbol} ou \parameter{approxsymbol} selon le cas ainsi que l'affichage avec une troncature et non un arrondi. Nous verrons comment obtenir un arrondi -à la section~\ref{sec:Operations evoluees} +à la section~\ref{sec:Operations evoluees} L'affichage en ligne de \verb+\opdiv+ tient compte de \parameter{maxdivstep}. Cela signifie que l'on peut obtenir des -résultats vraiment faux avec des valeurs trop faible de ce paramètre -et, contrairement à l'affichage posé, l'affichage en ligne ne -permettra pas de comprendre ce qu'il s'est passé. +résultats vraiment faux avec des valeurs trop faible de ce paramètre +et, contrairement à l'affichage posé, l'affichage en ligne ne +permettra pas de comprendre ce qu'il s'est passé. \begin{SideBySideExample} \opdiv[maxdivstep=2,style=text] {1248}{3} \end{SideBySideExample} -Si en plus, le dernier reste calculé est nul, on atteint un summum : +Si en plus, le dernier reste calculé est nul, on atteint un summum : \begin{SideBySideExample} \opdiv[maxdivstep=1,style=text] {1208}{3} \end{SideBySideExample} -puisqu'il n'y a même plus d'approximation ! +puisqu'il n'y a même plus d'approximation ! -Une division non euclidienne peut également s'arrêter sur la détection -de la survenue d'une période. Pour cela, il suffit de donner la valeur -\texttt{true} au paramètre \parameter{period}\index{division!période}. +Une division non euclidienne peut également s'arrêter sur la détection +de la survenue d'une période. Pour cela, il suffit de donner la valeur +\texttt{true} au paramètre \parameter{period}\index{division!période}. \begin{SideBySideExample} \opdiv[period]{100}{3} \end{SideBySideExample} -Pour ne pas avoir à effectuer des comparaisons de chaque reste avec -tous les restes précédents, \package{xlop} calcule dès le départ la -longueur de la période ce qui permet de n'effectuer qu'une seule -comparaison à chaque étape et donc d'accélérer notablement les -calculs\footnote{Je remercie à cette occasion Olivier Viennet pour ses - précisions mathématiques qui ont permis d'implanter correctement ces +Pour ne pas avoir à effectuer des comparaisons de chaque reste avec +tous les restes précédents, \package{xlop} calcule dès le départ la +longueur de la période ce qui permet de n'effectuer qu'une seule +comparaison à chaque étape et donc d'accélérer notablement les +calculs\footnote{Je remercie à cette occasion Olivier Viennet pour ses + précisions mathématiques qui ont permis d'implanter correctement ces calculs.}. Malheureusement, ces calculs se font avec des nombres -directement accessibles à \TeX{} ce qui a pour conséquence de ne pas -pouvoir utiliser d'opérandes dont la valeur absolue excède +directement accessibles à \TeX{} ce qui a pour conséquence de ne pas +pouvoir utiliser d'opérandes dont la valeur absolue excède $\left\lfloor\frac{2^{31}-1}{10}\right\rfloor = 214748364$. -Pour ne pas entraîner des calculs trop long, \package{xlop} ne -dépassera pas la valeur du paramètre \parameter{safedivstep} dans les -divisions avec détection de période. Sa valeur par défaut est égale -à~50. Cependant, \package{xlop} signalera le problème. Par exemple si +Pour ne pas entraîner des calculs trop long, \package{xlop} ne +dépassera pas la valeur du paramètre \parameter{safedivstep} dans les +divisions avec détection de période. Sa valeur par défaut est égale +à ~50. Cependant, \package{xlop} signalera le problème. Par exemple si on demande un tel calcul avec le code : \begin{Verbatim}[xrightmargin=0pt,frame=none] \opdiv[period]{1}{289} @@ -895,25 +1011,25 @@ on obtiendra le message d'avertissement : Division will stop before reach it. See documentation for further information. \end{Verbatim} -qui indique que la période de cette division est de~272 et qu'elle ne -sera donc pas atteinte à cause de la valeur de \texttt{safedivstep}. +qui indique que la période de cette division est de~272 et qu'elle ne +sera donc pas atteinte à cause de la valeur de \texttt{safedivstep}. -L'affichage en ligne d'une telle division présente quelque -particularités. +L'affichage en ligne d'une telle division présente quelque +particularités. \begin{SideBySideExample} \opdiv[period,style=text]{150}{7} \end{SideBySideExample} -On obtient donc une égalité au lieu d'une approximation, la présence -d'un trait sous la période et des points de suspension à la suite de -la période. Tous ces éléments peuvent être configurés. Le symbole -d'égalité est donné par le paramètre \parameter{equalsymbol} (valeur -par défaut \verb+{$=$}+), la largeur du trait par le paramètre -\parameter{hrulewidth} (valeur par défaut \texttt{0.4pt}), sa position -verticale par le paramètre \parameter{vruleperiod} (valeur par défaut -\texttt{-0.2}) qui indique un décalage vertical en prenant -\verb+\oplineheight+ comme unité et les points de suspension sont -donnés par le paramètre \parameter{afterperiodsymbol} (valeur par -défaut \verb+$\ldots$+). +On obtient donc une égalité au lieu d'une approximation, la présence +d'un trait sous la période et des points de suspension à la suite de +la période. Tous ces éléments peuvent être configurés. Le symbole +d'égalité est donné par le paramètre \parameter{equalsymbol} (valeur +par défaut \verb+{$=$}+), la largeur du trait par le paramètre +\parameter{hrulewidth} (valeur par défaut \texttt{0.4pt}), sa position +verticale par le paramètre \parameter{vruleperiod} (valeur par défaut +\texttt{-0.2}) qui indique un décalage vertical en prenant +\verb+\oplineheight+ comme unité et les points de suspension sont +donnés par le paramètre \parameter{afterperiodsymbol} (valeur par +défaut \verb+$\ldots$+). \begin{SideBySideExample} \opdiv[period,style=text, equalsymbol=$\approx$, @@ -923,14 +1039,14 @@ défaut \verb+$\ldots$+). {150}{7} \end{SideBySideExample} -\subsection{Éléments supplémentaires} +\subsection{Éléments supplémentaires} \label{subsec:Elements supplementaires} -Les divisions posées peuvent comporter les soustractions successives +Les divisions posées peuvent comporter les soustractions successives permettant le calcul des restes. Pour \package{xlop}, les nombres qui -sont soustraits sont des nombres intermédiaires donc les différentes -façons de représenter les soustractions utiliserons le paramètre -\parameter{displayintermediary} déjà vu pour la multiplication. La -valeur \texttt{none} (défaut) n'affichera aucune soustraction ainsi +sont soustraits sont des nombres intermédiaires donc les différentes +façons de représenter les soustractions utiliserons le paramètre +\parameter{displayintermediary} déjà vu pour la multiplication. La +valeur \texttt{none} (défaut) n'affichera aucune soustraction ainsi que la valeur \texttt{None}, la valeur \texttt{all} affichera toutes les soustractions et la valeur \texttt{nonzero} affichera les soustractions avec un nombre non nul. @@ -945,31 +1061,31 @@ soustractions avec un nombre non nul. Lorsqu'on pose une division, on peut dessiner un \og pont \fg{} au-dessus de la partie du dividende qui sera prise en compte pour la -première étape du calcul. L'extension \package{xlop} permet d'afficher -ce symbole grâce au paramètre booléen \parameter{dividendbridge} -(valeur par défaut \texttt{false}). +première étape du calcul. L'extension \package{xlop} permet d'afficher +ce symbole grâce au paramètre booléen \parameter{dividendbridge} +(valeur par défaut \texttt{false}). \begin{SideBySideExample} \opdiv[dividendbridge]{1254}{30} \end{SideBySideExample} -\subsection{Nombres non entiers et négatifs} +\subsection{Nombres non entiers et négatifs} \label{subsec:Nombres non entiers et negatifs} -La présentation d'opérandes non entières est gérée par le paramètre -\parameter{shiftdecimalsep}. Sa valeur par défaut est \texttt{both} et -indique que le séparateur décimal sera décalé pour obtenir un diviseur +La présentation d'opérandes non entières est gérée par le paramètre +\parameter{shiftdecimalsep}. Sa valeur par défaut est \texttt{both} et +indique que le séparateur décimal sera décalé pour obtenir un diviseur et un dividende entiers. La valeur \texttt{divisor} indique qu'il y -aura le décalage nécessaire pour obtenir un diviseur entier et la -valeur \texttt{none} indique qu'il n'y aura aucun décalage. +aura le décalage nécessaire pour obtenir un diviseur entier et la +valeur \texttt{none} indique qu'il n'y aura aucun décalage. \begin{CenterExample}[xrightmargin=0pt] \opdiv[shiftdecimalsep=both]{3.456}{25.6}\quad \opdiv[shiftdecimalsep=divisor]{3.456}{25.6}\quad \opdiv[shiftdecimalsep=none]{3.456}{25.6} \end{CenterExample} -Un symbole indiqué par le paramètre \parameter{strikedecimalsepsymbol} -est réservé pour montrer l'ancien emplacement de la virgule lorsqu'on -effectue un décalage. La valeur par défaut de ce paramètre est vide ce -qui fait que l'on ne voyait rien sur les exemples précédents. +Un symbole indiqué par le paramètre \parameter{strikedecimalsepsymbol} +est réservé pour montrer l'ancien emplacement de la virgule lorsqu'on +effectue un décalage. La valeur par défaut de ce paramètre est vide ce +qui fait que l'on ne voyait rien sur les exemples précédents. \begin{CenterExample}[xrightmargin=0pt] \opset{strikedecimalsepsymbol={\rlap{,}\rule[-1pt]{3pt}{0.4pt}}} \opdiv[shiftdecimalsep=both]{3.456}{25.6}\quad @@ -977,8 +1093,8 @@ qui fait que l'on ne voyait rien sur les exemples précédents. \opdiv[shiftdecimalsep=none]{3.456}{25.6} \end{CenterExample} -La présence d'un symbole non vide pour le séparateur décimal barré -peut laisser les zéros non significatifs au niveau des opérandes. +La présence d'un symbole non vide pour le séparateur décimal barré +peut laisser les zéros non significatifs au niveau des opérandes. \begin{SideBySideExample} \opdiv[shiftdecimalsep=divisor, strikedecimalsepsymbol=% @@ -986,23 +1102,23 @@ peut laisser les zéros non significatifs au niveau des opérandes. {0.03456}{2.56} \end{SideBySideExample} -Comme nous l'avons déjà vu, la macro \macro{opidiv} donne un quotient -entier, cela même si les opérandes sont non entières. Il est un peu -bizarre de vouloir réaliser une division euclidienne sur des nombres +Comme nous l'avons déjà vu, la macro \macro{opidiv} donne un quotient +entier, cela même si les opérandes sont non entières. Il est un peu +bizarre de vouloir réaliser une division euclidienne sur des nombres non entiers et la macro \macro{opidiv} sera assez stricte sur sa -présentation. Les paramètres \parameter{maxdivstep}, +présentation. Les paramètres \parameter{maxdivstep}, \parameter{safedivstep} et \parameter{period} seront sans effet ainsi -que le paramètre \parameter{shiftdecimalsep}, les deux opérandes étant -rendues entières. +que le paramètre \parameter{shiftdecimalsep}, les deux opérandes étant +rendues entières. \begin{SideBySideExample} \opidiv[strikedecimalsepsymbol=% \hspace{-3pt}\tiny$\times$] {34.57}{7} \end{SideBySideExample} -Lorsque les opérandes sont négatives, l'affichage en ligne de -\macro{opidiv} différera des données obtenues avec l'affichage -posée. Le reste sera nécessairement un nombre compris entre zéro +Lorsque les opérandes sont négatives, l'affichage en ligne de +\macro{opidiv} différera des données obtenues avec l'affichage +posée. Le reste sera nécessairement un nombre compris entre zéro (inclus) et la valeur absolue du diviseur (exclu). \begin{SideBySideExample} \opdiv[style=text]{124}{7}\par @@ -1012,7 +1128,7 @@ posée. Le reste sera nécessairement un nombre compris entre zéro \opidiv[style=text]{-124}{-7} \end{SideBySideExample} -Cette condition sur le reste reste valable même avec un diviseur non +Cette condition sur le reste reste valable même avec un diviseur non entier. \begin{SideBySideExample} \opidiv[style=text]{1.24}{0.7}\par @@ -1023,16 +1139,16 @@ entier. \chapter{Autres commandes} \label{chap:Autres commandes} -\section{Macros étoilées} +\section{Macros étoilées} \label{sec:Macros etoilees} -Les cinq macros vues au chapitre précédent ont une version -étoilée. Ces macros étoilées réalisent le calcul mais ne procèdent à -aucun affichage, le résultat étant stocké dans une variable donnée en +Les cinq macros vues au chapitre précédent ont une version +étoilée. Ces macros étoilées réalisent le calcul mais ne procèdent à +aucun affichage, le résultat étant stocké dans une variable donnée en dernier argument. -Comme ces commandes n'affichent rien, les paramètres ne seront pas -acceptés pour les macros \macro{opadd*}, \macro{opsub*}, -\macro{opmul*} et \macro{opidiv*}. En revanche, les paramètres +Comme ces commandes n'affichent rien, les paramètres ne seront pas +acceptés pour les macros \macro{opadd*}, \macro{opsub*}, +\macro{opmul*} et \macro{opidiv*}. En revanche, les paramètres \parameter{maxdivestep}, \parameter{safedivstep} et \parameter{period} influencent les calculs et la macro \macro{opdiv*} acceptera donc un argument optionnel pour pouvoir en tenir compte. @@ -1042,7 +1158,7 @@ argument optionnel pour pouvoir en tenir compte. \opadd[style=text]{a}{1} \end{SideBySideExample} Pour les macros \macro{opdiv} et \macro{opidiv}, il y aura deux -arguments supplémentaires pour pouvoir recevoir le quotient et le +arguments supplémentaires pour pouvoir recevoir le quotient et le reste final. \begin{SideBySideExample} \opdiv*[maxdivstep=1]{-88}{16}{q}{r}% @@ -1051,28 +1167,28 @@ reste final. \opadd[style=text]{bq}{r} \end{SideBySideExample} -\section{Entrées-sorties} +\section{Entrées-sorties} \label{sec:Entree-sorties} -La macro \macro{opcopy} recopie son premier argument dans son deuxième -argument. Le premier argument est donc un nombre écrit sous forme -décimale ou via une variable alors que le second sera considérée comme +La macro \macro{opcopy} recopie son premier argument dans son deuxième +argument. Le premier argument est donc un nombre écrit sous forme +décimale ou via une variable alors que le second sera considérée comme un nom de variable. La macro \macro{opprint} affiche son argument. L'exemple qui suit utilise le compteur \macro{time} qui indique le nombre de minutes -écoulés depuis minuit. +écoulés depuis minuit. \begin{SideBySideExample} \opidiv*{\the\time}{60}{h}{m}% Il est \opprint{h}~heures et \opprint{m}~minutes \end{SideBySideExample} -On verra à la section~\ref{sec:Comparaisons} comment améliorer cet +On verra à la section~\ref{sec:Comparaisons} comment améliorer cet affichage avec des tests. -La macro \macro{opdisplay} affiche également un nombre mais en -écrivant chaque chiffre dans une boîte de largeur donnée par -\parameter{columnwidth} et de hauteur donnée par -\parameter{lineheight}. Le style est spécifié par le premier argument +La macro \macro{opdisplay} affiche également un nombre mais en +écrivant chaque chiffre dans une boîte de largeur donnée par +\parameter{columnwidth} et de hauteur donnée par +\parameter{lineheight}. Le style est spécifié par le premier argument et cette macro accepte un argument optionnel pour permettre de donner un style particulier aux chiffres individuels. \begin{SideBySideExample} @@ -1082,12 +1198,12 @@ un style particulier aux chiffres individuels. \end{SideBySideExample} Les macros \macro{oplput} et \macro{oprput} permettent de placer un -objet à un emplacement déterminé. La syntaxe de ces commandes ne +objet à un emplacement déterminé. La syntaxe de ces commandes ne suit pas celle des autres macros de \package{xlop} puisque -l'emplacement est indiqué sous forme de coordonnées entre -parenthèses. Les coordonnées utilisent \macro{opcolumnwidth} et -\macro{oplineheight} comme unités ce qui permet à l'utilisateur de -construire lui-même ses propres \og opérations \fg. +l'emplacement est indiqué sous forme de coordonnées entre +parenthèses. Les coordonnées utilisent \macro{opcolumnwidth} et +\macro{oplineheight} comme unités ce qui permet à l'utilisateur de +construire lui-même ses propres \og opérations \fg. \begin{SideBySideExample} \psset{xunit=\opcolumnwidth, yunit=\oplineheight}% @@ -1098,18 +1214,18 @@ construire lui-même ses propres \og opérations \fg. $\bullet$ \end{SideBySideExample} Sur l'exemple ci-dessus, on peut voir que ces deux macros ne modifient -pas le point de référence. Elles prennent même la précaution d'inhiber -l'espace automatique qui les suit pour qu'il ne soit pas nécessaire de +pas le point de référence. Elles prennent même la précaution d'inhiber +l'espace automatique qui les suit pour qu'il ne soit pas nécessaire de mettre un \verb+%+ en fin de ligne. -Les macros \macro{ophline} et \macro{opvline} complète les deux -précédentes pour donner à l'utilisateur les outils lui permettant de -construire ses propres opérations. La macro \macro{ophline} permet de -placer un trait horizontal dont la longueur est donné par le paramètre -qui suit les coordonnées. La macro \macro{opvline} fait de même avec -les traits verticaux. On rappelle que les paramètres +Les macros \macro{ophline} et \macro{opvline} complète les deux +précédentes pour donner à l'utilisateur les outils lui permettant de +construire ses propres opérations. La macro \macro{ophline} permet de +placer un trait horizontal dont la longueur est donné par le paramètre +qui suit les coordonnées. La macro \macro{opvline} fait de même avec +les traits verticaux. On rappelle que les paramètres \parameter{hrulewidth} et \parameter{vrulewidth} indiquent les -épaisseurs respectives de ces types de traits. +épaisseurs respectives de ces types de traits. \begin{CenterExample}[xrightmargin=0pt] \par\vspace{2\oplineheight} \oplput(1,2){O}\oplput(2,2){N}\oplput(3,2){E} @@ -1121,14 +1237,14 @@ les traits verticaux. On rappelle que les paramètres La macro \macro{opexport}\refstepcounter{stuff}\label{macro-opexport} permet d'exporter un nombre dans une macro. Il s'agit d'un ajout de la -version 0.23 qui est très utile pour faire dialoguer \package{xlop} -avec le monde extérieur. Le premier argument est un nombre au sens -\package{xlop}, c'est-à-dire soit un nombre écrit directement avec des -chiffres, soit un nom de variable. Le nombre sera écrit sous une forme -directement compréhensible par \TeX{} dans le deuxième argument qui -doit donc être un nom de macro. On notera cependant que le séparateur -décimal sera celui désigné par \parameter{decimalsepsymbol} débarrassé -de ses éventuelles accolades. +version 0.23 qui est très utile pour faire dialoguer \package{xlop} +avec le monde extérieur. Le premier argument est un nombre au sens +\package{xlop}, c'est-à -dire soit un nombre écrit directement avec des +chiffres, soit un nom de variable. Le nombre sera écrit sous une forme +directement compréhensible par \TeX{} dans le deuxième argument qui +doit donc être un nom de macro. On notera cependant que le séparateur +décimal sera celui désigné par \parameter{decimalsepsymbol} débarrassé +de ses éventuelles accolades. \begin{SideBySideExample} \opmul*{5}{3.141592654}{C} \opexport{C}{\fivepi} @@ -1136,18 +1252,18 @@ de ses éventuelles accolades. \end{SideBySideExample} On peut se servir de cette macro, par exemple, pour afficher des -nombres calculés par \package{xlop} dans un tableau avec un alignement -décimal ou encore pour initialiser un compteur ou une longueur (ne pas -oublier l'unité dans ce dernier cas). +nombres calculés par \package{xlop} dans un tableau avec un alignement +décimal ou encore pour initialiser un compteur ou une longueur (ne pas +oublier l'unité dans ce dernier cas). \section{Chiffres d'un nombre} \label{sec:Chiffres d'un nombre} Les macros \macro{opwidth}, \macro{opintegerwidth} et \macro{opdecimalwidth} indiquent respectivement le nombre de chiffres -du nombre dans sa totalité, de sa partie entière et de sa partie -décimale. Le premier argument est le nombre sur lequel s'effectue le -comptage et le second argument indique la variable où sera stocké le -résultat. +du nombre dans sa totalité, de sa partie entière et de sa partie +décimale. Le premier argument est le nombre sur lequel s'effectue le +comptage et le second argument indique la variable où sera stocké le +résultat. \begin{SideBySideExample} \opcopy{123456.1234}{a}% \opwidth{a}{na}% @@ -1159,9 +1275,9 @@ résultat. d\'ecimale). \end{SideBySideExample} -La macro \macro{opunzero} permet de supprimer les zéros non -significatifs\index{zeros non significatifs@zéros non significatifs} -du nombre passé en argument. +La macro \macro{opunzero} permet de supprimer les zéros non +significatifs\index{zeros non significatifs@zéros non significatifs} +du nombre passé en argument. \begin{SideBySideExample} \opcopy{00150.00250}{a}% Avant : \opprint{a}\par @@ -1170,11 +1286,11 @@ du nombre passé en argument. \end{SideBySideExample} Les macros \macro{integer} et \macro{opdecimal} donnent respectivement -la partie entière et la partie décimale d'un nombre. -\index{nombre!partie entière}\index{partie entière}% -\index{nombre!partie décimale}\index{partie décimale}% -Le premier argument est le nombre à traiter et le second est la -variable qui contiendra le résultat. +la partie entière et la partie décimale d'un nombre. +\index{nombre!partie entière}\index{partie entière}% +\index{nombre!partie décimale}\index{partie décimale}% +Le premier argument est le nombre à traiter et le second est la +variable qui contiendra le résultat. \begin{SideBySideExample} \opcopy{-37.69911}{a}% \opinteger{a}{ia}% @@ -1183,14 +1299,14 @@ variable qui contiendra le résultat. Partie d\'ecimale : \opprint{da} \end{SideBySideExample} -Six macros servent à écrire ou lire un chiffre d'un nombre. On peut -lire ou écrire un chiffre selon son rang dans le nombre, dans sa -partie entière ou dans sa partie décimale. Les chiffres pour le nombre -dans sa totalité ou pour sa partie entière sont numérotés de droite à -gauche et, pour sa partie décimale de gauche à droite. Ainsi, avec le -nombre 1234,56789, le deuxième chiffre est 8, le deuxième chiffre de -sa partie entière est 3 et le deuxième chiffre de sa partie décimale -est 6. Il est alors facile de deviner le rôle respectif des six macros +Six macros servent à écrire ou lire un chiffre d'un nombre. On peut +lire ou écrire un chiffre selon son rang dans le nombre, dans sa +partie entière ou dans sa partie décimale. Les chiffres pour le nombre +dans sa totalité ou pour sa partie entière sont numérotés de droite à +gauche et, pour sa partie décimale de gauche à droite. Ainsi, avec le +nombre 1234,56789, le deuxième chiffre est 8, le deuxième chiffre de +sa partie entière est 3 et le deuxième chiffre de sa partie décimale +est 6. Il est alors facile de deviner le rôle respectif des six macros : \begin{itemize} \item \parameter{opgetdigit} ; @@ -1200,39 +1316,39 @@ est 6. Il est alors facile de deviner le rôle respectif des six macros \item \parameter{opgetdecimaldigit} ; \item \parameter{opsetdecimaldigit} ; \end{itemize} -La syntaxe est la même pour ces six macros. Le premier argument est le -nombre sur lequel doit porter la lecture ou l'écriture, le deuxième -argument est l'index donnant la position du chiffre et le troisième +La syntaxe est la même pour ces six macros. Le premier argument est le +nombre sur lequel doit porter la lecture ou l'écriture, le deuxième +argument est l'index donnant la position du chiffre et le troisième argument est le nom de la variable qui contiendra le chiffre lu ou -bien ce qui devra être écrit. Si l'index est en dehors du nombre, les -macros de lecture donneront \texttt{0} comme résultat et les macros -d'écriture étendront le nombre pour pouvoir atteindre cet index en -créant des zéros dans les nouvelles positions. +bien le chiffre qui devra être écrit. Si l'index est en dehors du +nombre, les macros de lecture donneront \texttt{0} comme résultat et +les macros d'écriture étendront le nombre pour pouvoir atteindre cet +index en créant des zéros dans les nouvelles positions. \section{Comparaisons} \label{sec:Comparaisons} -Lorsqu'on désire concevoir des macros évoluées, il est très souvent -utile de pouvoir réaliser des tests. Pour cela, \package{xlop} met à +Lorsqu'on désire concevoir des macros évoluées, il est très souvent +utile de pouvoir réaliser des tests. Pour cela, \package{xlop} met à disposition la macro \macro{opcmp} dont les deux arguments sont des -nombres et qui mettra à jour les tests \macro{ifopgt}, \macro{ifopge}, +nombres et qui mettra à jour les tests \macro{ifopgt}, \macro{ifopge}, \macro{ifople}, \macro{ifoplt}, \macro{ifopeq} et \macro{ifopneq} pour -respectivement indiquer que la première opérande est strictement -supérieure, supérieure, inférieure, strictement inférieure, égale ou -différente de la seconde opérande. - -Pour des raisons techniques, \package{xlop} donne des définitions -globales aux six tests précédents. Ceux-ci ne seront donc pas protégés -par les groupes. Comme ces tests sont utilisés par un grand nombre de -macros de \package{xlop}, une conséquence pratique est qu'il faut -\emph{toujours} réaliser les tests \verb+\ifop...+ immédiatement -après le \macro{opcmp}, ou, du moins, avant toute autre utilisation de -macros de \package{xlop} sous peine de bogues éventuels difficiles à +respectivement indiquer que la première opérande est strictement +supérieure, supérieure, inférieure, strictement inférieure, égale ou +différente de la seconde opérande. + +Pour des raisons techniques, \package{xlop} donne des définitions +globales aux six tests précédents. Ceux-ci ne seront donc pas protégés +par les groupes. Comme ces tests sont utilisés par un grand nombre de +macros de \package{xlop}, une conséquence pratique est qu'il faut +\emph{toujours} réaliser les tests \verb+\ifop...+ immédiatement +après le \macro{opcmp}, ou, du moins, avant toute autre utilisation de +macros de \package{xlop} sous peine de bogues éventuels difficiles à comprendre ! -On va reprendre la macro d'affichage de l'heure donnée à la -section~\ref{sec:Entree-sorties} mais en vérifiant si l'argument est -compris entre~0 (inclus) et~1440 (exclu) puis en réalisant les tests -nécessaires pour voir si \og heure \fg{} doit être ou non au pluriel +On va reprendre la macro d'affichage de l'heure donnée à la +section~\ref{sec:Entree-sorties} mais en vérifiant si l'argument est +compris entre~0 (inclus) et~1440 (exclu) puis en réalisant les tests +nécessaires pour voir si \og heure \fg{} doit être ou non au pluriel ainsi que \og minute \fg{}. \begin{CenterExample}[xrightmargin=0pt] @@ -1255,30 +1371,30 @@ ainsi que \og minute \fg{}. \heure{60} -- \heure{1080} -- \heure{1081} -- \heure{1082} \end{CenterExample} -\section{Opérations évoluées} +\section{Opérations évoluées} \label{sec:Operations evoluees} -Les macros qui nous restent à voir proviennent soit de commandes -utilisées de façon interne et qu'il aurait été dommage de ne pas +Les macros qui nous restent à voir proviennent soit de commandes +utilisées de façon interne et qu'il aurait été dommage de ne pas rendre publiques, soit de demandes d'utilisateurs. -Les macros utilisées de façon interne sont \macro{opgcd}\index{pgcd} +Les macros utilisées de façon interne sont \macro{opgcd}\index{pgcd} qui donne le pgcd de deux nombres et -\macro{opdivperiod}\index{division!période} qui donne la longueur de -la période d'un quotient de deux nombres. Pour des raisons -d'efficacité, ces macros n'utilisent pas les nombres de \package{xlop} -mais des nombres directement accessibles à \TeX{}. Cela a pour -conséquence que les nombres passés en paramètres dans les deux -premiers arguments ne devront pas dépasser la valeur +\macro{opdivperiod}\index{division!période} qui donne la longueur de +la période d'un quotient de deux nombres. Pour des raisons +d'efficacité, ces macros n'utilisent pas les nombres de \package{xlop} +mais des nombres directement accessibles à \TeX{}. Cela a pour +conséquence que les nombres passés en paramètres dans les deux +premiers arguments ne devront pas dépasser la valeur \texttt{2147483647} pour \macro{opgcd} et \texttt{214748364} pour -\macro{opdivperiod}. Un message d'avertissement rappellera à l'ordre -en cas de dépassement. Le résultat sera stocké dans la variable -indiqué en troisième paramètre. +\macro{opdivperiod}. Un message d'avertissement rappellera à l'ordre +en cas de dépassement. Le résultat sera stocké dans la variable +indiqué en troisième paramètre. -Il y aura également quelques vérifications sur les deux premiers -paramètres. Un pgcd ne peut pas avoir d'argument nul et le calcul de -la longueur d'une période ne pourra pas se faire avec un quotient -nul. D'autre part, si un nombre non entier est passé en paramètre, -seule la partie entière sera prise en compte. +Il y aura également quelques vérifications sur les deux premiers +paramètres. Un pgcd ne peut pas avoir d'argument nul et le calcul de +la longueur d'une période ne pourra pas se faire avec un quotient +nul. D'autre part, si un nombre non entier est passé en paramètre, +seule la partie entière sera prise en compte. \begin{SideBySideExample} \opcopy{5376}{a}% \opcopy{2304}{b}% @@ -1288,8 +1404,8 @@ seule la partie entière sera prise en compte. $\pgcd(\opprint{a},\opprint{b}) = \opprint{gcd(ab)}$ \end{SideBySideExample} -Si vous voulez vous amuser à trouver de grandes périodes de divisions, -sans entrer dans les détails mathématiques, les carrés de nombres +Si vous voulez vous amuser à trouver de grandes périodes de divisions, +sans entrer dans les détails mathématiques, les carrés de nombres premiers sont de bons candidats. Par exemple, avec $257^2=66049$ on trouve : \begin{SideBySideExample} @@ -1301,13 +1417,13 @@ trouve : Les macros \macro{opcastingoutnines}\index{preuve!par neuf} et \macro{opcastingoutelevens}\index{preuve!par onze} vont permettre de composer des preuves par neuf et par onze. L'extension \package{xlop} -ne propose pas directement ces compositions puisqu'elles nécessitent -des traits en diagonal et donc le recours à d'autres extensions. En -réalité, la macro \macro{opcastingoutnines} va faire la somme modulo~9 -des chiffres du premier argument et stockera le résultat dans le +ne propose pas directement ces compositions puisqu'elles nécessitent +des traits en diagonal et donc le recours à d'autres extensions. En +réalité, la macro \macro{opcastingoutnines} va faire la somme modulo~9 +des chiffres du premier argument et stockera le résultat dans le second argument tandis que la macro \macro{opcastingoutelevens} fera la somme des chiffres de rangs impairs, la somme des chiffres de rangs -pairs puis la différence modulo~11 de ces deux sommes. +pairs puis la différence modulo~11 de ces deux sommes. \begin{SideBySideExample} \newcommand\castingoutnines[3]{% \opcastingoutnines{#1}{cna}% @@ -1328,28 +1444,28 @@ pairs puis la différence modulo~11 de ces deux sommes. \castingoutnines{157}{317}{49669} \end{SideBySideExample} Incidemment, cet exemple montre que $157\times317\neq49669$ ! La -réponse correcte est \opmul[style=text]{157}{317}. - -Les deux macros suivantes sont très simples. Il s'agit de -\macro{opneg} qui calcul l'opposé de son premier argument et le -sauvegarde dans la variable indiquée par le second argument et de -\macro{opabs} qui réalise la même chose mais avec la valeur absolue. - -La macro \macro{oppower} calcule des puissances entières. Cette macro -demande trois paramètres, le troisième paramètre étant la variable -recevant le résultat du premier paramètre à la puissance le deuxième -paramètre. Le deuxième paramètre doit être un nombre entier. Lorsque -le premier argument est nul, si le deuxième paramètre est nul, le -résultat sera~1, s'il est strictement positif, le résultat sera nul et -s'il est strictement négatif il y aura une erreur et aucun résultat ne -sera fourni. Il n'y a aucune limitation sur le premier paramètre ce -qui peut entraîner quelques problèmes. Par exemple : +réponse correcte est \opmul[style=text]{157}{317}. + +Les deux macros suivantes sont très simples. Il s'agit de +\macro{opneg} qui calcul l'opposé de son premier argument et le +sauvegarde dans la variable indiquée par le second argument et de +\macro{opabs} qui réalise la même chose mais avec la valeur absolue. + +La macro \macro{oppower} calcule des puissances entières. Cette macro +demande trois paramètres, le troisième paramètre étant la variable +recevant le résultat du premier paramètre à la puissance le deuxième +paramètre. Le deuxième paramètre doit être un nombre entier. Lorsque +le premier argument est nul, si le deuxième paramètre est nul, le +résultat sera~1, s'il est strictement positif, le résultat sera nul et +s'il est strictement négatif il y aura une erreur et aucun résultat ne +sera fourni. Il n'y a aucune limitation sur le premier paramètre ce +qui peut entraîner quelques problèmes. Par exemple : \begin{CenterExample}[xrightmargin=0pt] \opcopy{0.8}{a}\opcopy{-17}{n}% \oppower{a}{n}{r}% $\opprint{a}^{\opprint{n}} = \opprint{r}$ \end{CenterExample} -Avec $0{,}7$ au lieu de $0{,}8$, le problème aurait été encore pire : +Avec $0{,}7$ au lieu de $0{,}8$, le problème aurait été encore pire : \begin{CenterExample}[xrightmargin=0pt] \opcopy{0.7}{a}\opcopy{-8}{n}% \oppower{a}{n}{r}% @@ -1357,30 +1473,30 @@ Avec $0{,}7$ au lieu de $0{,}8$, le problème aurait été encore pire : $\opprint{a}^{\opprint{n}}$ a \opprint{dr} chiffres apr\`es la virgule. \end{CenterExample} -Cela est dû au fait que lorsque l'exposant est négatif, +Cela est dû au fait que lorsque l'exposant est négatif, \package{xlop} calcule \emph{d'abord} l'inverse du nombre pour -\emph{ensuite} calculer la puissance avec l'opposé de l'exposant. Si -on avait laissé $-17$ au lieu de $-8$ dans l'exemple précédent, les -capacités de \TeX{} auraient été dépassées. - -Les trois macros qui suivent permettent de contrôler la précision des -nombres manipulés. Elles permettent de construire un nombre en donnant -une valeur approchée par défaut, par excès ou un arrondi d'un nombre -donné en précisant le rang où devra se faire l'arrondi. Ces macros +\emph{ensuite} calculer la puissance avec l'opposé de l'exposant. Si +on avait laissé $-17$ au lieu de $-8$ dans l'exemple précédent, les +capacités de \TeX{} auraient été dépassées. + +Les trois macros qui suivent permettent de contrôler la précision des +nombres manipulés. Elles permettent de construire un nombre en donnant +une valeur approchée par défaut, par excès ou un arrondi d'un nombre +donné en précisant le rang où devra se faire l'arrondi. Ces macros sont respectivement \macro{opfloor}, \macro{opceil} et -\macro{opround}. Elles demandent trois paramètres qui seront dans -l'ordre le nombre de départ, le rang de l'arrondi et le nom de la -variable qui contiendra le résultat. - -Le rang est indiqué par une valeur entière donnant le nombre de -chiffres après la virgule qui doivent être présents. Si le rang est -négatif, l'arrondi se fera avant la virgule. Si le rang positif -indique plus de chiffres que la partie décimale n'en a, des zéros -seront ajoutés. Si le rang négatif indique plus de chiffres que la -partie entière n'en a, l'arrondi restera bloqué pour donner au moins +\macro{opround}. Elles demandent trois paramètres qui seront dans +l'ordre le nombre de départ, le rang de l'arrondi et le nom de la +variable qui contiendra le résultat. + +Le rang est indiqué par une valeur entière donnant le nombre de +chiffres après la virgule qui doivent être présents. Si le rang est +négatif, l'arrondi se fera avant la virgule. Si le rang positif +indique plus de chiffres que la partie décimale n'en a, des zéros +seront ajoutés. Si le rang négatif indique plus de chiffres que la +partie entière n'en a, l'arrondi restera bloqué pour donner au moins le premier chiffre du nombre. -Voici un tableau récapitulatif pour mieux comprendre le fonctionnement +Voici un tableau récapitulatif pour mieux comprendre le fonctionnement de ces trois macros. \begin{center} \opcopy{3838.3838}{a} @@ -1461,67 +1577,67 @@ de ces trois macros. \end{tabular} \end{center} -\index{racine carrée} -Avec la version~0.26, \package{xlop} propose l'opération de racine -carrée \macro{opsqrt}. Cette macro n'a pas la même syntaxe que les -autres macros arithmétiques puisqu'il n'y a pas de forme étoilée. En -réalité, il y a bien une façon d'afficher l'opération d'extraction de -racine carrée mais elle n'est pas franchement courante. Je suis -relativement âgé et mon grand-père me racontait qu'il l'avait vue -lorsqu'il était à l'école. Ainsi, il y a une macro \macro{opgfsqrt} où -le \og gf \fg{} est pour \og grandfather \fg{} (grand-père). +\index{racine carrée} +Avec la version~0.26, \package{xlop} propose l'opération de racine +carrée \macro{opsqrt}. Cette macro n'a pas la même syntaxe que les +autres macros arithmétiques puisqu'il n'y a pas de forme étoilée. En +réalité, il y a bien une façon d'afficher l'opération d'extraction de +racine carrée mais elle n'est pas franchement courante. Je suis +relativement âgé et mon grand-père me racontait qu'il l'avait vue +lorsqu'il était à l'école. Ainsi, il y a une macro \macro{opgfsqrt} où +le \og gf \fg{} est pour \og grandfather \fg{} (grand-père). -Voyons la première macro : celle qui calcule la racine carrée et qui -stocke le résultat dans une variable \package{xlop}: +Voyons la première macro : celle qui calcule la racine carrée et qui +stocke le résultat dans une variable \package{xlop}: \begin{SideBySideExample} \opsqrt{2}{sqrt2} $\sqrt{2}\approx\opprint{sqrt2}$ \end{SideBySideExample} -Cette macro partage le paramètre \parameter{maxdivstep} avec les +Cette macro partage le paramètre \parameter{maxdivstep} avec les macros de division. Par exemple: \begin{SideBySideExample} \opsqrt[maxdivstep=15]{2}{sqrt2} $\sqrt{2}\approx\opprint{sqrt2}$ \end{SideBySideExample} -Pour la présentation à la \og grand-père \fg{}, je n'ai vraiment pas -le courage d'expliquer tout le processus. Il se base sur l'eidentioté -remarquable $(a+b)^2=a^2+2ab+b^2$. Merci à Jean-Michel Sarlat d'avoir -pris le temps de m'expliquer cette méthode afin que je puisse la coder +Pour la présentation à la \og grand-père \fg{}, je n'ai vraiment pas +le courage d'expliquer tout le processus. Il se base sur l'eidentioté +remarquable $(a+b)^2=a^2+2ab+b^2$. Merci à Jean-Michel Sarlat d'avoir +pris le temps de m'expliquer cette méthode afin que je puisse la coder dans \package{xlop}. -Voici un exemple avec le calcul de la racine carrée de 15 : +Voici un exemple avec le calcul de la racine carrée de 15 : \begin{CenterExample} \opgfsqrt[maxdivstep=5]{15} \end{CenterExample} -Cette méthode est horrible, autant pour un humain que pour -l'ordinateur. Par exemple, l'opération réellement effectuée par -\package{xlop} se fonde sur la méthode de Héron. +Cette méthode est horrible, autant pour un humain que pour +l'ordinateur. Par exemple, l'opération réellement effectuée par +\package{xlop} se fonde sur la méthode de Héron. \index{expression complexe|(} -La dernière macro qui nous reste à voir est \macro{opexpr} qui permet -de réaliser le calcul d'une expression complexe. Cette macro demande -deux paramètres : le premier est l'expression à calculer donnée sous +La dernière macro qui nous reste à voir est \macro{opexpr} qui permet +de réaliser le calcul d'une expression complexe. Cette macro demande +deux paramètres : le premier est l'expression à calculer donnée sous forme infixe (la forme habituelle pour un humain) et le second est le -nom de la variable qui contiendra le résultat. +nom de la variable qui contiendra le résultat. -Initialement, la formule devait être donnée sous forme polonaise +Initialement, la formule devait être donnée sous forme polonaise inverse (la notation des calculatrices HP ou du langage PostScript par exemple) mais un travail commun avec Christophe Jorssen a finalement -abouti à la possibilité de donner l'expression sous une forme plus -agréable pour l'utilisateur. +abouti à la possibilité de donner l'expression sous une forme plus +agréable pour l'utilisateur. -Les formules acceptent les opérateurs arithmétiques habituels -\texttt{+}, \texttt{-}, \texttt{*} et \texttt{/} ainsi que l'opérateur +Les formules acceptent les opérateurs arithmétiques habituels +\texttt{+}, \texttt{-}, \texttt{*} et \texttt{/} ainsi que l'opérateur \texttt{:} pour la division euclidienne et \verb+^+ pour -l'exponentiation. L'opérateur \texttt{-} a les deux rôles d'opérateur -binaire de la soustraction et d'opérateur unaire pour l'opposé. -L'opérateur \texttt{+} a également les deux rôles d'opérateur binaire -de l'addition et d'opérateur unaire ne faisant \ldots{} rien ! Les -opérandes sont écrites sous forme décimale ou par l'intermédiaire de +l'exponentiation. L'opérateur \texttt{-} a les deux rôles d'opérateur +binaire de la soustraction et d'opérateur unaire pour l'opposé. +L'opérateur \texttt{+} a également les deux rôles d'opérateur binaire +de l'addition et d'opérateur unaire ne faisant \ldots{} rien ! Les +opérandes sont écrites sous forme décimale ou par l'intermédiaire de nom de variable cependant, la macro \macro{opexpr} va introduire une petite restriction sur les noms de variables puisque ceux-ci devront -être différents des noms de fonctions reconnus par cette macro. Les +être différents des noms de fonctions reconnus par cette macro. Les fonctions accessibles sont : \begin{itemize} \item \texttt{abs(a)} ; @@ -1530,23 +1646,23 @@ fonctions accessibles sont : \item \texttt{floor(a,i)} ; \item \texttt{gcd(a,b)} ; \item \texttt{integer(a)} ; -\item \texttt{mod(a,b)} qui donne le résultat de \texttt{a} modulo +\item \texttt{mod(a,b)} qui donne le résultat de \texttt{a} modulo \texttt{b} ; \item \texttt{rest(a,b)} qui donne le reste de la division de - \texttt{a} par \texttt{b} (la différence entre reste et modulo est - la différence qui existe entre division non euclidienne et division + \texttt{a} par \texttt{b} (la différence entre reste et modulo est + la différence qui existe entre division non euclidienne et division euclidienne) ; \item \texttt{round(a,i)}. \end{itemize} -où les fonctions non décrites ci-dessus font appel aux macros -correspondantes (la fonction \texttt{xxx} faisant appel à la macro +où les fonctions non décrites ci-dessus font appel aux macros +correspondantes (la fonction \texttt{xxx} faisant appel à la macro \verb+\opxxx+). Pour les fonctions \texttt{ceil}, \texttt{floor} et \texttt{round}, le nombre \texttt{i} indique le rang sur lequel doit se faire l'arrondi. La macro \macro{opexpr} accepte un argument optionnel car elle peut -réaliser des divisions et que ces divisions doivent pouvoir être -contrôlées \emph{via} les paramètres \parameter{maxdivstep}, +réaliser des divisions et que ces divisions doivent pouvoir être +contrôlées \emph{via} les paramètres \parameter{maxdivstep}, \parameter{safedivstep} et \parameter{period}. Notre premier exemple est assez basique : \begin{CenterExample}[xrightmargin=0pt] @@ -1554,7 +1670,7 @@ Notre premier exemple est assez basique : $3--\gcd(15\times17,25\times27)\times2 = \opprint{r}$ \end{CenterExample} -Voici un autre exemple montrant que des données peuvent provenir d'une +Voici un autre exemple montrant que des données peuvent provenir d'une macro : \begin{CenterExample}[xrightmargin=0pt] \newcommand\try{2}% @@ -1569,41 +1685,41 @@ macro : \index{expression complexe|)} \appendix -\chapter{Aide-mémoire} -\label{chap:Aide-mémoire} +\chapter{Aide-mémoire} +\label{chap:Aide-mémoire} \section{Temps de compilation} \label{sec:Temps de compilation} -Les temps de compilation ont été mesurés sur une machine à processeur +Les temps de compilation ont été mesurés sur une machine à processeur Pentium~II~600\,MHz ayant 256\,Mo de RAM et tournant sous Linux -(Debian woody)\footnote{En réalité, ces mesures ont été effectuées en - 2004 lors de la sortie de la version 0.2. L'auteur étant fainéant, - il n'a pas repris ces tests avec son matériel actuel (bien plus - performant) !}. Le principe a été de faire un fichier TeX{} minimum -dont le schéma général est donné par : +(Debian woody)\footnote{En réalité, ces mesures ont été effectuées en + 2004 lors de la sortie de la version 0.2. L'auteur étant fainéant, + il n'a pas repris ces tests avec son matériel actuel (bien plus + performant) !}. Le principe a été de faire un fichier TeX{} minimum +dont le schéma général est donné par : \begin{verbatim} \input xlop \count255=0 \loop \ifnum\count255<1000 - <opération à tester> + <opération à tester> \advance\count255 by1 \repeat \bye \end{verbatim} -Le temps de compilation avec \verb+<opération à tester>+ vide a été -soustrait des autres tests et seul le temps utilisateur a été pris en -compte. Les résultats sont donnés en millisecondes et sont évidemment -à prendre avec beaucoup de précautions. +Le temps de compilation avec \verb+<opération à tester>+ vide a été +soustrait des autres tests et seul le temps utilisateur a été pris en +compte. Les résultats sont donnés en millisecondes et sont évidemment +à prendre avec beaucoup de précautions. \index{compilation (temps de)|(}\index{temps de calcul|(}% -Le tableau suivant donne le temps de compilation des opérations en -millisecondes. Les opérandes utilisées l'ont été avec une écriture -sous forme de chiffres mais des essais avec des opérandes sous forme -de noms de variable ont montré que les différences étaient vraiment +Le tableau suivant donne le temps de compilation des opérations en +millisecondes. Les opérandes utilisées l'ont été avec une écriture +sous forme de chiffres mais des essais avec des opérandes sous forme +de noms de variable ont montré que les différences étaient vraiment minimes. -La première ligne indique le nombre de chiffres des deux -opérandes. Ces nombres ont été construits de la façons suivantes : +La première ligne indique le nombre de chiffres des deux +opérandes. Ces nombres ont été construits de la façons suivantes : \begin{itemize} \item $\mathrm{A} = 1$ et $\mathrm{B} = 9$ pour un chiffre ; \item $\mathrm{A} = 12$ et $\mathrm{B} = 98$ pour deux chiffres ; @@ -1614,7 +1730,7 @@ opérandes. Ces nombres ont été construits de la façons suivantes : \item $\mathrm{A} = 12345678901234567890$ et $\mathrm{B} = 98765432109876543210$ pour vingt chiffres ; \end{itemize} -Voici les résultats, quelques commentaires suivront : +Voici les résultats, quelques commentaires suivront : \bigskip\noindent\hbox to\linewidth{\hss \begin{tabular}{|r|*{6}{l|}} @@ -1656,38 +1772,38 @@ Voici les résultats, quelques commentaires suivront : \hss } \par\bigskip -Il est normal que l'inversion des opérandes n'ait aucune influence +Il est normal que l'inversion des opérandes n'ait aucune influence pour l'addition. Il peut alors sembler anormal qu'elle en ait une pour -la soustraction mais en fait, avoir une seconde opérande supérieure à -la première va entraîner quelques instructions supplémentaires (double -inversion, gestion plus longue du signe du résultat). +la soustraction mais en fait, avoir une seconde opérande supérieure à +la première va entraîner quelques instructions supplémentaires (double +inversion, gestion plus longue du signe du résultat). -Il est normal que le temps de la division soit supérieur à celui de la +Il est normal que le temps de la division soit supérieur à celui de la multiplication. Il peut alors sembler anormal que la division ait l'air de \og rattraper \fg{} son retard. En fait, une multiplication -voit sa complexité fortement augmenter avec la taille des opérandes -mais la division normale est bloquée par le paramètre -\parameter{maxdivstep}. On le voit bien sur l'exemple où on limite ce -maximum à 5~étapes. - -Quelques résultats semblent bizarres. Ainsi, -\verb+\opdiv*{9}{1}{q}{r}+ est anormalement rapide : cela est dû -au fait d'avoir un quotient à un seul chiffre. Plus bizarre encore, -\verb+\opdiv*{123}{987}{q}{r}+ est plutôt rapide. Ici, -l'explication est plus subtile : cela est dû à la présence de nombreux -zéros au quotient. - -Avec des opérandes de taille comparable, la division euclidienne est -très rapide par rapport à la division non euclidienne. Cela est dû au +voit sa complexité fortement augmenter avec la taille des opérandes +mais la division normale est bloquée par le paramètre +\parameter{maxdivstep}. On le voit bien sur l'exemple où on limite ce +maximum à 5~étapes. + +Quelques résultats semblent bizarres. Ainsi, +\verb+\opdiv*{9}{1}{q}{r}+ est anormalement rapide : cela est dû +au fait d'avoir un quotient à un seul chiffre. Plus bizarre encore, +\verb+\opdiv*{123}{987}{q}{r}+ est plutôt rapide. Ici, +l'explication est plus subtile : cela est dû à la présence de nombreux +zéros au quotient. + +Avec des opérandes de taille comparable, la division euclidienne est +très rapide par rapport à la division non euclidienne. Cela est dû au fait que le quotient n'aura que peu de chiffres (un seul avec tous les -nombres \texttt{A} et \texttt{B}). La dernière ligne du tableau est -plus représentative des temps de compilation que l'on peut obtenir -avec cette opération. - -Toutes ces remarques sont faites pour bien insister sur la difficulté -à évaluer un temps de compilation a priori : il dépend de trop de -paramètres. Cela dit, le tableau permet d'avoir quand même une idée de -ce à quoi il faut s'attendre. +nombres \texttt{A} et \texttt{B}). La dernière ligne du tableau est +plus représentative des temps de compilation que l'on peut obtenir +avec cette opération. + +Toutes ces remarques sont faites pour bien insister sur la difficulté +à évaluer un temps de compilation a priori : il dépend de trop de +paramètres. Cela dit, le tableau permet d'avoir quand même une idée de +ce à quoi il faut s'attendre. \index{compilation (temps de)|)}\index{temps de calcul|)} \clearpage @@ -1704,390 +1820,407 @@ ce à quoi il faut s'attendre. \multicolumn{1}{c|}{\textbf{Description}} \\\hline\hline \endhead \hline - \multicolumn{2}{|c|}{$\ldots$ à suivre $\ldots$}\\ + \multicolumn{2}{|c|}{$\ldots$ à suivre $\ldots$}\\ \hline \endfoot \hline \endlastfoot \verb+\opabs{n}{N}+ & - \verb+N+ reçoit la valeur absolue de \verb+n+. \\\hline + \verb+N+ reçoit la valeur absolue de \verb+n+. \\\hline \verb+\opadd[P]{n1}{n2}+ & - Affiche le résultat de l'opération \verb-n1+n2-. \\\hline + Affiche le résultat de l'opération \verb-n1+n2-. \\\hline \verb+\opadd*{n1}{n2}{N}+ & - Calcule \verb-n1+n2- et place le résultat dans + Calcule \verb-n1+n2- et place le résultat dans \verb+N+. \\\hline \verb+\opcastingoutelevens{n}{N}+ & - Calcule la différence (modulo 11) de la somme des chiffres de rang + Calcule la différence (modulo 11) de la somme des chiffres de rang impair et de la somme des chiffres de rang pair de \verb+n+ et - place le résultat dans \verb+N+. \\\hline + place le résultat dans \verb+N+. \\\hline \verb+\opcastingoutnines{n}{N}+. & Calcule la somme modulo 9 des chiffres de \verb+n+ et place le - résultat dans \verb+N+. \\\hline + résultat dans \verb+N+. \\\hline \verb+\opceil{n}{T}{N}+ & - Place dans \verb+N+ la valeur approchée par excès de + Place dans \verb+N+ la valeur approchée par excès de \verb+n+ au rang \verb+T+. \\\hline \verb+\opcmp{n1}{n2}+ & - Compare les nombres \verb+n1+ et \verb+n2+ et réalise la - mise à jour correspondante des tests \verb+\ifopeq+, + Compare les nombres \verb+n1+ et \verb+n2+ et réalise la + mise à jour correspondante des tests \verb+\ifopeq+, \verb+\ifopneq+, \verb+\ifopgt+, \verb+\ifopge+, \verb+\ifople+ et \verb+\ifoplt+. \\\hline \verb+\opcopy{n}{N}+ & Copie le nombre \verb+n+ dans \verb+N+. \\\hline \verb+\opdecimal{n}{N}+ & - Copie la partie décimale (nombre entier positif) de \verb+n+ + Copie la partie décimale (nombre entier positif) de \verb+n+ dans \verb+N+. \\\hline \verb+\opdecimalwidth{n}{N}+ & - Le nombre \verb+N+ reçoit la largeur de la partie décimale du + Le nombre \verb+N+ reçoit la largeur de la partie décimale du nombre \verb+n+. \\\hline \verb+\opdisplay[P]{S}{n}+ & Affiche le nombre \verb+n+ avec le style \verb+S+ en - plaçant chaque chiffre dans une boîte de largeur + plaçant chaque chiffre dans une boîte de largeur \verb+\opcolumnwidth+ et de hauteur \verb+\oplineheight+. \\\hline \verb+\opdiv[P]{n1}{n2}+ & - Affiche le résultat de l'opération n1/n2. \\\hline + Affiche le résultat de l'opération n1/n2. \\\hline \verb+\opdiv*[P]{n1}{n2}{N1}{N2}+ & Calcule \verb+n1/n2+, place le quotient dans \verb+N1+ et le reste dans \verb+N2+. \\\hline \verb+\opdivperiod{T1}{T2}{N}+ & - Calcule la longueur de la période de la division de \verb+T1+ - par \verb+T2+ et place le résultat dans \verb+N+. \\\hline + Calcule la longueur de la période de la division de \verb+T1+ + par \verb+T2+ et place le résultat dans \verb+N+. \\\hline \verb+\opexport[P]{n}\cmd+ & Copie le nombre \verb+n+ dans la macro \verb+\cmd+. \\\hline \verb+\opexpr[P]{F}{N}+ & - \'Évalue la formule \texttt{F} est place le résultat final dans le + Évalue la formule \texttt{F} est place le résultat final dans le nombre \texttt{N}. \\\hline \verb+\opfloor{n}{T}{N}+ & - Place dans \verb+N+ la valeur approchée par défaut de + Place dans \verb+N+ la valeur approchée par défaut de \verb+n+ au rang \verb+T+. \\\hline \verb+\opgcd{T1}{T2}{N}+ & Calcule le pgcd de \verb+T1+ et \verb+T2+ et place le - résultat dans \verb+N+. \\\hline + résultat dans \verb+N+. \\\hline \verb+\opgetdecimaldigit{n}{T}{N}+ & - Construit le nombre \verb+N+ avec le seul chiffre situé en - \verb+T+ième position de la partie décimale du nombre + Construit le nombre \verb+N+ avec le seul chiffre situé en + \verb+T+ième position de la partie décimale du nombre \verb+n+. \\\hline \verb+\opgetdigit{n}{T}{N}+ & - Construit le nombre \verb+N+ avec le seul chiffre situé en - \verb+T+ième position du nombre \verb+n+. \\\hline + Construit le nombre \verb+N+ avec le seul chiffre situé en + \verb+T+ième position du nombre \verb+n+. \\\hline \verb+\opgetintegerdigit{n}{T}{N}+ & - Construit le nombre \verb+N+ avec le seul chiffre situé en - \verb+T+ième position de la partie entière du nombre + Construit le nombre \verb+N+ avec le seul chiffre situé en + \verb+T+ième position de la partie entière du nombre \verb+n+. \\\hline \verb+\opgfsqrt{n}+ & - Affiche la façon ancienne d'afficher le calcul de la racine - carrée de \verb+n+. \\\hline + Affiche la façon ancienne d'afficher le calcul de la racine + carrée de \verb+n+. \\\hline \verb+\ophline(T1,T2){T3}+ & - Trace un trait horizontal de longueur \verb+T3+, d'épaisseur - \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par - rapport au point de référence. \\\hline + Trace un trait horizontal de longueur \verb+T3+, d'épaisseur + \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par + rapport au point de référence. \\\hline \verb+\opidiv[P]{n1}{n2}+ & - Affiche le résultat de l'opération \verb+n1/n2+ (division - euclidienne, c'est-à-dire avec un quotient entier). \\\hline + Affiche le résultat de l'opération \verb+n1/n2+ (division + euclidienne, c'est-à -dire avec un quotient entier). \\\hline \verb+\opidiv*{n1}{n2}{N1}{N2}+ & Calcule \verb+n1/n2+ (division euclidienne), place le quotient (entier) dans \verb+N1+ et le reste (compris entre 0 inclus et \verb+|n2|+ exclu) dans \verb+N2+. \\\hline \verb+\opinteger{n}{N}+ & - Copie la partie entière (nombre entier positif) de \verb+n+ + Copie la partie entière (nombre entier positif) de \verb+n+ dans \verb+N+. \\\hline \verb+\opintegerwidth{n}{N}+ & - Le nombre \verb+N+ reçoit la longueur de la partie entière du + Le nombre \verb+N+ reçoit la longueur de la partie entière du nombre \verb+n+. \\\hline \verb+\oplput(T1,T2){<objet>}+ & - Place \verb+<objet>+ à droite du point situé en - \verb+(T1,T2)+ par rapport au point de référence. \\\hline + Place \verb+<objet>+ à droite du point situé en + \verb+(T1,T2)+ par rapport au point de référence. \\\hline + \verb+\opmanyadd[P]{n1}...{np}+ & + Affiche le résultat de l'opération + $\mathrm{n1}+\cdots+\mathrm{np}$. \\\hline \verb+\opmul[P]{n1}{n2}+ & - Affiche le résultat de l'opération \verb+n1*n2+. \\\hline + Affiche le résultat de l'opération \verb+n1*n2+. \\\hline \verb+\opmul*{n1}{n2}{N}+ & - Calcule \verb+n1*n2+ et place le résultat dans + Calcule \verb+n1*n2+ et place le résultat dans \verb+N+. \\\hline \verb+\opneg{n}{N}+ & - Le nombre \verb+N+ reçoit l'opposé de \verb+n+. \\\hline + Le nombre \verb+N+ reçoit l'opposé de \verb+n+. \\\hline \verb+\oppower{n}{T}{N}+ & - Calcule \verb+n+ à la puissance \verb+T+ et place le - résultat dans \verb+N+. \\\hline + Calcule \verb+n+ à la puissance \verb+T+ et place le + résultat dans \verb+N+. \\\hline \verb+\opprint{n}+ & - Affiche le nombre \verb+n+ de façon directe. \\\hline + Affiche le nombre \verb+n+ de façon directe. \\\hline \verb+\opround{n}{T}{N}+ & Place dans \verb+N+ la valeur arrondie de \verb+n+ au rang \verb+T+. \\\hline \verb+\oprput(T1,T2){<objet>}+ & - Place \verb+<objet>+ à gauche du point situé en - \verb+(T1,T2)+ par rapport au point de référence. \\\hline + Place \verb+<objet>+ à gauche du point situé en + \verb+(T1,T2)+ par rapport au point de référence. \\\hline \verb+\opset{L}+ & - Effectue une affectation globale des paramètres de \package{xlop} - désignés dans la liste \verb+L+. \\\hline + Effectue une affectation globale des paramètres de \package{xlop} + désignés dans la liste \verb+L+. \\\hline \verb+\opsetdecimaldigit{n}{T}{N}+ & - Modifie le \verb+T+ième chiffre de la partie décimale de - \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline + Modifie le \verb+T+ième chiffre de la partie décimale de + \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline \verb+\opsetdigit{n}{T}{N}+ & - Modifie le \verb+T+ième chiffre de \verb+N+ pour qu'il - soit égal à \verb+n+. \\\hline + Modifie le \verb+T+ième chiffre de \verb+N+ pour qu'il + soit égal à \verb+n+. \\\hline \verb+\opsetintegerdigit{n}{T}{N}+ & - Modifie le \verb+T+ième chiffre de la partie entière de - \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline + Modifie le \verb+T+ième chiffre de la partie entière de + \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline \verb+\opsqrt{n}{N}+ & - Mémorise la racine carrée de \verb+n+ dans \verb+N+. \\\hline + Mémorise la racine carrée de \verb+n+ dans \verb+N+. \\\hline \verb+\opsub[P]{n1}{n2}+ & - Affiche le résultat de l'opération n1-n2. \\\hline + Affiche le résultat de l'opération n1-n2. \\\hline \verb+\opsub*{n1}{n2}{N}+ & - Calcule n1-n2 et place le résultat dans N. \\\hline + Calcule n1-n2 et place le résultat dans N. \\\hline \verb+\opunzero{N}+ & - Supprime les zéros non significatifs du nombre \verb+N+. \\\hline + Supprime les zéros non significatifs du nombre \verb+N+. \\\hline \verb+\opvline(T1,T2){T3}+ & - Trace un trait vertical de longueur \verb+T3+, d'épaisseur - \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par - rapport au point de référence. \\\hline + Trace un trait vertical de longueur \verb+T3+, d'épaisseur + \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par + rapport au point de référence. \\\hline \verb+\opwidth{n}{N}+ & - Le nombre \verb+N+ reçoit le nombre de chiffres du nombre + Le nombre \verb+N+ reçoit le nombre de chiffres du nombre \verb+n+. \\\hline \end{longtable}\index{macros!table des|)} -Dans ce tableau, les paramètres : +Dans ce tableau, les paramètres : \begin{itemize} -\item \texttt{n} et \texttt{ni} (où \texttt{i} représente un indice) - indiquent que le paramètre doit être un nombre donné sous forme - décimale ou sous forme d'un nom de variable ; -\item \texttt{N} et \texttt{Ni} (où \texttt{i} représente un indice) - indiquent que le paramètre doit être un nombre donné sous forme d'un +\item \texttt{n} et \texttt{ni} (où \texttt{i} représente un indice) + indiquent que le paramètre doit être un nombre donné sous forme + décimale ou sous forme d'un nom de variable ; +\item \texttt{N} et \texttt{Ni} (où \texttt{i} représente un indice) + indiquent que le paramètre doit être un nombre donné sous forme d'un nom de variable ; -\item \texttt{[P]} indique que la macro accepte un paramètre optionnel - permettant de modifier les paramètres de \package{xlop} ; -\item \texttt{T} et \texttt{Ti} (où \texttt{i} représente un indice) - indiquent que le paramètre doit être un nombre donné sous forme - décimale ou sous forme d'un nom de variable mais ne devant pas - excéder la taille des nombres directement acceptables par \TeX{} +\item \texttt{[P]} indique que la macro accepte un paramètre optionnel + permettant de modifier les paramètres de \package{xlop} ; +\item \texttt{T} et \texttt{Ti} (où \texttt{i} représente un indice) + indiquent que le paramètre doit être un nombre donné sous forme + décimale ou sous forme d'un nom de variable mais ne devant pas + excéder la taille des nombres directement acceptables par \TeX{} ($-2147483648 \le \mathtt{T} \le 2147483647$ en l'occurrence). \end{itemize} \newpage -\section{Liste des paramètres} +\section{Liste des paramètres} \label{sec:Liste des parametres} -\index{parametres@paramètres!table des|(}% +\index{parametres@paramètres!table des|(}% \begingroup \advance\hoffset by-1.75cm \advance\linewidth by1.75cm \begin{longtable}{|l|l|p{7cm}|} \hline - \multicolumn{1}{|c|}{\textbf{Paramètre}} & - \multicolumn{1}{c|}{\textbf{Défaut}} & + \multicolumn{1}{|c|}{\textbf{Paramètre}} & + \multicolumn{1}{c|}{\textbf{Défaut}} & \multicolumn{1}{c|}{\textbf{Signification}} \\\hline\hline \endfirsthead \hline - \multicolumn{1}{|c|}{\textbf{Paramètre}} & - \multicolumn{1}{c|}{\textbf{Défaut}} & + \multicolumn{1}{|c|}{\textbf{Paramètre}} & + \multicolumn{1}{c|}{\textbf{Défaut}} & \multicolumn{1}{c|}{\textbf{Signification}} \\\hline\hline \endhead \hline - \multicolumn{3}{|c|}{$\ldots$ à suivre $\ldots$}\\ + \multicolumn{3}{|c|}{$\ldots$ à suivre $\ldots$}\\ \hline \endfoot \hline \endlastfoot \verb+afterperiodsymbol+ & \verb+$\ldots$+ & - Symbole utilisé à la suite de la période d'une division. \\\hline + Symbole utilisé à la suite de la période d'une division. \\\hline \verb+approxsymbol+ & \verb+$\approx$+ & - Symbole utilisé comme relation d'égalité approximative dans les - opérations en ligne. \\\hline + Symbole utilisé comme relation d'égalité approximative dans les + opérations en ligne. \\\hline \verb+equalsymbol+ & \verb+{$=$}+ & - Symbole utilisé comme relation d'égalité dans les opérations en + Symbole utilisé comme relation d'égalité dans les opérations en ligne. \\\hline \verb+addsymbol+ & \verb-$+$- & - Symbole utilisé comme opérateur d'addition. \\\hline + Symbole utilisé comme opérateur d'addition. \\\hline \verb+subsymbol+ & \verb+$-$+ & - Symbole utilisé comme opérateur de soustraction. \\\hline + Symbole utilisé comme opérateur de soustraction. \\\hline \verb+mulsymbol+ & \verb+$\times$+ & - Symbole utilisé comme opérateur de multiplication. \\\hline + Symbole utilisé comme opérateur de multiplication. \\\hline \verb+divsymbol+ & \verb+$\div$+ & - Symbole utilisé comme opérateur de division pour les opérations en + Symbole utilisé comme opérateur de division pour les opérations en ligne. \\\hline \verb+decimalsepsymbol+ & \verb+.+ & - Symbole utilisé comme séparateur décimal. \\\hline + Symbole utilisé comme séparateur décimal. \\\hline \verb+strikedecimalsepsymbol+ & & - Symbole utilisé pour un séparateur décimal déplacé au niveau du - dividende et du diviseur dans les divisions posées. \\\hline + Symbole utilisé pour un séparateur décimal déplacé au niveau du + dividende et du diviseur dans les divisions posées. \\\hline \verb+shiftintermediarysymbol+ & \verb+$\cdot$+ & - Symbole utilisé pour montrer les décalages des nombres - intermédiaires dans les multiplications posées. \\\hline + Symbole utilisé pour montrer les décalages des nombres + intermédiaires dans les multiplications posées. \\\hline \verb+displayshiftintermediary+ & \verb+shift+ & - Indique que le caractère de décalage dans les multiplications sera - affiché uniquement pour le décalage supplémentaire (valeur - \verb+shift+), pour tous les décalages (valeur \verb+all+) + Indique que le caractère de décalage dans les multiplications sera + affiché uniquement pour le décalage supplémentaire (valeur + \verb+shift+), pour tous les décalages (valeur \verb+all+) ou jamais (valeur \verb+none+). \\\hline + \verb+vmanyoperator+ & + \verb+center+ & + Positionnement vertical des opérateurs. La valeur \verb+top+ place + les opérateurs en face des opérandes, de la première opérande + jusqu'à l'avant-dernière. La valeur \verb+center+ place les + opérateurs entre les opérandes. La valeur \verb+bottom+ place les + opérateurs en face des opérandes, de la deuxième opérande jusqu'à la + dernière. La valeur \verb+Top+ place un unique opérateur au niveau + de la première opérande. La valeur \verb+\center+ place un unique + opérateur au milieu vertical des opérandes. La valeur + \verb+Bottom+ place un unique opérateur au niveau de la dernière + opérande. \\\hline \verb+voperation+ & \verb+bottom+ & - Type d'alignement vertical d'une opération posée. La - valeur \verb+bottom+ indique que le bas de l'opération sera + Type d'alignement vertical d'une opération posée. La + valeur \verb+bottom+ indique que le bas de l'opération sera au niveau de la ligne de base. La valeur \verb+top+ indique - que la première ligne de l'opération sera sur la ligne de base. La - valeur \verb+center+ indique que l'opération sera centrée + que la première ligne de l'opération sera sur la ligne de base. La + valeur \verb+center+ indique que l'opération sera centrée verticalement sur la ligne de base. \\\hline \verb+voperator+ & \verb+center+ & - Positionnement vertical de l'opérateur dans les - opérations posées. La valeur \verb+top+ place l'opérateur au - niveau de la première opérande. La valeur \verb+bottom+ place - l'opérateur au niveau de la seconde opérande. La valeur - \verb+center+ place l'opérateur entre les deux - opérandes. \\\hline + Positionnement vertical de l'opérateur dans les + opérations posées. La valeur \verb+top+ place l'opérateur au + niveau de la première opérande. La valeur \verb+bottom+ place + l'opérateur au niveau de la seconde opérande. La valeur + \verb+center+ place l'opérateur entre les deux + opérandes. \\\hline \verb+hfactor+ & \verb+decimal+ & - Type d'alignement des opérandes dans les - multiplications posées. La valeur \verb+decimal+ indique un + Type d'alignement des opérandes dans les + multiplications posées. La valeur \verb+decimal+ indique un alignement sur la virgule. La valeur \verb+right+ indique une - composition au fer à droite. \\\hline + composition au fer à droite. \\\hline \verb+vruleperiod+ & \verb+-0.2+ & - Position verticale du trait indiquant la période du quotient + Position verticale du trait indiquant la période du quotient dans les divisions en ligne. \\\hline \verb+dividendbridge+ & \verb+false+ & - Indique si le \og pont \fg{} au-dessus du dividende est présent ou + Indique si le \og pont \fg{} au-dessus du dividende est présent ou non. \\\hline \verb+shiftdecimalsep+ & \verb+both+ & - Indique la façon dont se fait le décalage de virgule au niveau des - opérandes d'une division posée. La valeur \verb+both+ indique - que le décalage doit rendre le diviseur et le dividende - entiers. La valeur \verb+divisor+ indique que le décalage + Indique la façon dont se fait le décalage de virgule au niveau des + opérandes d'une division posée. La valeur \verb+both+ indique + que le décalage doit rendre le diviseur et le dividende + entiers. La valeur \verb+divisor+ indique que le décalage doit rendre le diviseur entier. La valeur \verb+none+ indique - qu'il n'y aura aucun décalage. \\\hline + qu'il n'y aura aucun décalage. \\\hline \verb+maxdivstep+ & \verb+10+ & - Nombre d'étapes maximum d'une division. \\\hline + Nombre d'étapes maximum d'une division. \\\hline \verb+safedivstep+ & \verb+50+ & - Nombre d'étapes maximum d'une division lors d'un arrêt sur - période. \\\hline + Nombre d'étapes maximum d'une division lors d'un arrêt sur + période. \\\hline \verb+period+ & \verb+false+ & - Indique si la division doit s'arrêter sur une détection de période + Indique si la division doit s'arrêter sur une détection de période ou non. \\\hline \verb+deletezero+ & \verb+true+ & Indique si on affiche (\verb+false+) ou on supprime - (\verb+true+) les zéros non significatifs. \\\hline + (\verb+true+) les zéros non significatifs. \\\hline \verb+carryadd+ & \verb+true+ & - Indique si les retenues doivent être affichées pour les additions - posées. \\\hline + Indique si les retenues doivent être affichées pour les additions + posées. \\\hline \verb+carrysub+ & \verb+false+ & - Indique si les retenues doivent être affichées pour les - soustractions posées. \\\hline + Indique si les retenues doivent être affichées pour les + soustractions posées. \\\hline \verb+offsetcarry+ & \verb+-0.35+ & - Décalage horizontal pour les retenues dans les - soustractions posées. \\\hline + Décalage horizontal pour les retenues dans les + soustractions posées. \\\hline \verb+style+ & \verb+display+ & - Indique si l'opération doit être en ligne (\verb+text+) ou - posée (\verb+display+). \\\hline + Indique si l'opération doit être en ligne (\verb+text+) ou + posée (\verb+display+). \\\hline \verb+displayintermediary+ & \verb+nonzero+ & - Indique si les résultats intermédiaires doivent être affichés + Indique si les résultats intermédiaires doivent être affichés (\verb+all+) ou seulement les non nuls (\verb+nonzero+) ou aucun (valeur \verb+none+) dans les multiplications et les divisions. \\\hline \verb+lastcarry+ & \verb+false+ & Indique si la retenue au niveau d'une absence de chiffre devra - être affichée ou non. \\\hline + être affichée ou non. \\\hline \verb+parenthesisnegative+ & \verb+none+ & - Comportement à adopter pour l'affichage des nombres - négatifs dans les opérations en lignes. La valeur \verb+none+ - les affiche sans parenthèse, \verb+all+ les mettra - systématiquement les nombres négatifs entre parenthèses et - \verb+last+ les mettra entre parenthèses - sauf pour la première valeur d'une expression. \\\hline + Comportement à adopter pour l'affichage des nombres + négatifs dans les opérations en lignes. La valeur \verb+none+ + les affiche sans parenthèse, \verb+all+ les mettra + systématiquement les nombres négatifs entre parenthèses et + \verb+last+ les mettra entre parenthèses + sauf pour la première valeur d'une expression. \\\hline \verb+columnwidth+ & \verb+2ex+ & - Largeur des boîtes contenant un chiffre. \\\hline + Largeur des boîtes contenant un chiffre. \\\hline \verb+lineheight+ & \verb+\baselineskip+ & - Hauteur des boîtes contenant un chiffre. \\\hline + Hauteur des boîtes contenant un chiffre. \\\hline \verb+decimalsepwidth+ & \verb+0pt+ & - Largeur de la boîte contenant le séparateur décimal. \\\hline + Largeur de la boîte contenant le séparateur décimal. \\\hline \verb+decimalsepoffset+ & \verb+0pt+ & - Décalage horizontal du séparateur décimal. \\\hline + Décalage horizontal du séparateur décimal. \\\hline \verb+hrulewidth+ & \verb+0.4pt+ & - \'Épaisseur des lignes horizontales. \\\hline + Épaisseur des lignes horizontales. \\\hline \verb+vrulewidth+ & \verb+0.4pt+ & - \'Épaisseur des lignes verticales. \\\hline + Épaisseur des lignes verticales. \\\hline \verb+behaviorsub+ & \verb+silent+ & - Comportement de \package{xlop} face à une - soustraction \og impossible \fg{}, c'est-à-dire une soustraction - ayant ses deux opérandes positives avec une seconde opérande - strictement supérieure à la première. La valeur \verb+silent+ - effectuera l'opération en permutant les opérandes de façon - silencieuse. La valeur \verb+warning+ fera de même mais en - émettant un message d'avertissement. Enfin, la valeur - \verb+error+ affichera un message d'erreur et l'opération ne - sera pas effectuée. \\\hline + Comportement de \package{xlop} face à une + soustraction \og impossible \fg{}, c'est-à -dire une soustraction + ayant ses deux opérandes positives avec une seconde opérande + strictement supérieure à la première. La valeur \verb+silent+ + effectuera l'opération en permutant les opérandes de façon + silencieuse. La valeur \verb+warning+ fera de même mais en + émettant un message d'avertissement. Enfin, la valeur + \verb+error+ affichera un message d'erreur et l'opération ne + sera pas effectuée. \\\hline \verb+country+ & \verb+french+ & - Indique le comportement des opérations posées en fonction du - pays. L'extension prévoit pour l'instant \verb+french+, - \verb+american+ et \verb+russian+ mais les différentes - façons de présenter les opérations ne sont pas implantées dans la + Indique le comportement des opérations posées en fonction du + pays. L'extension prévoit pour l'instant \verb+french+, + \verb+american+ et \verb+russian+ mais les différentes + façons de présenter les opérations ne sont pas implantées dans la version 0.2. \\\hline \verb+operandstyle+ & & - Style utilisé pour les opérandes. \\\hline + Style utilisé pour les opérandes. \\\hline \verb+resultstyle+ & & - Style utilisé pour les résultats. \\\hline + Style utilisé pour les résultats. \\\hline \verb+remainderstyle+ & & - Style utilisé pour les restes. \\\hline + Style utilisé pour les restes. \\\hline \verb+intermediarystyle+ & & - Style utilisé pour les résultats intermédiaires (nombres - intermédiaires dans une multiplication et nombres à soustraire - dans une division où apparaissent les soustractions + Style utilisé pour les résultats intermédiaires (nombres + intermédiaires dans une multiplication et nombres à soustraire + dans une division où apparaissent les soustractions successives). \\\hline \verb+carrystyle+ & \verb+\scriptsize+ & - Style utilisé pour les retenues. La valeur par défaut lorsqu'on ne + Style utilisé pour les retenues. La valeur par défaut lorsqu'on ne compile pas sous \LaTeX{} est \verb+\sevenrm+. \\\hline -\end{longtable}\index{parametres@paramètres!table des|)} +\end{longtable}\index{parametres@paramètres!table des|)} \newpage\endgroup \chapter{Trucs et astuces} \label{chap:Trucs et astuces} -\section{Comparaison avec \package{calc} et \package{fp}} +\section{Comparaison avec \package{calc} et \package{xfp}} On pourrait croire que \package{xlop} puisse remplacer avantageusement des extensions telles que \package{calc}\index{extension!calc}\index{calc} et -\package{fp}\index{extension!fp}\index{fp}. En réalité, c'est un peu -plus compliqué que cela. Bien sûr, \package{xlop} permet des calculs -complexes et sur des nombres comportant un nombre arbitraire de -chiffres mais, contrairement à \package{calc}, il ne permet pas de -gérer directement les unités. La comparaison avec \package{fp} est un -peu plus réaliste mais il ne faut pas perdre de vue que \package{xlop} -peut devenir gourmand en mémoire et en temps de calcul. - -Si vous voulez vraiment réaliser des calculs sur des +\package{xfp}\index{extension!xfp}\index{xfp}. En réalité, c'est un +peu plus compliqué que cela. Bien sûr, \package{xlop} permet des +calculs complexes et sur des nombres comportant un nombre arbitraire +de chiffres mais, contrairement à \package{calc}, il ne permet pas de +gérer directement les unités. La comparaison avec \package{xfp} est un +peu plus réaliste mais il ne faut pas perdre de vue que \package{xlop} +peut devenir gourmand en mémoire et en temps de calcul. En réalité, +\package{xfp} est bien plus efficace que \package{xlop} en ce qui +concerne les calculs purs. + +Si vous voulez vraiment réaliser des calculs sur des longueurs\index{longueur}, vous pouvez toujours utiliser le fait -qu'une affectation d'un registre de longueur à un compteur donnera un -nombre correspondant à cette longueur avec l'unité \texttt{sp}. +qu'une affectation d'un registre de longueur à un compteur donnera un +nombre correspondant à cette longueur avec l'unité \texttt{sp}. \begin{CenterExample}[xrightmargin=0pt] \newcommand\getsize[2]{% \dimen0=#1\relax @@ -2104,9 +2237,9 @@ nombre correspondant à cette longueur avec l'unité \texttt{sp}. \getsize{1sp}{r}$1\,\mathrm{sp}=\opprint{r}\,\mathrm{sp}$\quad \end{CenterExample} N'oubliez cependant pas que le but principal de \package{xlop} est -d'\emph{afficher} automatiquement les opérations. +d'\emph{afficher} automatiquement les opérations. -Muni de la macro \macro{getsize}, il est possible de réaliser des +Muni de la macro \macro{getsize}, il est possible de réaliser des calculs sur des longueurs. \newcommand\getsize[2]{% \dimen0=#1\relax @@ -2133,14 +2266,14 @@ calculs sur des longueurs. \opprint{S}\,$\mathrm{cm}^2$ \end{Verbatim} -\section{Création d'opérations complexes} +\section{Création d'opérations complexes} \label{sec:Creation d'operations complexes} -L'utilisation des macros de \package{xlop} associées au mécanisme de -boucle de \TeX{} permet de créer des opérations à volonté. Nous ne -donnerons que deux exemples. Le premier est la décomposition d'un -nombre en facteurs premiers, le second est un calcul général de +L'utilisation des macros de \package{xlop} associées au mécanisme de +boucle de \TeX{} permet de créer des opérations à volonté. Nous ne +donnerons que deux exemples. Le premier est la décomposition d'un +nombre en facteurs premiers, le second est un calcul général de fraction continue.\index{nombre!premier}\index{boucle|(}% -\index{decomposition@décomposition en nombres premiers} +\index{decomposition@décomposition en nombres premiers} \begin{Verbatim}[xrightmargin=0pt] \newcount\primeindex \newcount\tryindex @@ -2230,7 +2363,7 @@ fraction continue.\index{nombre!premier}\index{boucle|(}% \endgroup } -Avec ce code, on dispose d'un moyen de créer une liste de nombres +Avec ce code, on dispose d'un moyen de créer une liste de nombres premiers (en l'occurrence les 20~premiers). \begin{SideBySideExample} \getprime{20}% @@ -2238,18 +2371,18 @@ premiers (en l'occurrence les 20~premiers). \opprint{P9}, \ldots \opprint{P19}. \end{SideBySideExample} -On notera toutefois que ce code est très mauvais, il est excessivement -lent et n'apporte rien par rapport à une approche directe avec des -nombres manipulés par les opérations natives de \TeX{}. Ce n'est -qu'un exemple pédagogique. On notera également l'astuce permettant -d'emboîter deux boucles avec la macro \verb+\testprimality+ -entièrement mise dans un groupe : s'il est nécessaire de rendre les +On notera toutefois que ce code est très mauvais, il est excessivement +lent et n'apporte rien par rapport à une approche directe avec des +nombres manipulés par les opérations natives de \TeX{}. Ce n'est +qu'un exemple pédagogique. On notera également l'astuce permettant +d'emboîter deux boucles avec la macro \verb+\testprimality+ +entièrement mise dans un groupe : s'il est nécessaire de rendre les affectations \verb+\primetrue+ et \verb+\primefalse+ globales, les -opérations de \package{xlop} rendent leurs résultats globaux +opérations de \package{xlop} rendent leurs résultats globaux directement.\index{affectation globale}% Une fois que vous avez votre \og table \fg{} de nombres premiers, vous -pouvez vous en servir pour décomposer un nombre en facteurs +pouvez vous en servir pour décomposer un nombre en facteurs premiers. \begin{CenterExample}[xrightmargin=0pt] \newcommand\primedecomp[2][nil]{% @@ -2308,28 +2441,28 @@ premiers. intermediarystyle.2=\red]{252} \end{CenterExample} Dans ce code, on notera l'emploi d'un groupe entourant l'ensemble de -la macro pour protéger les modifications de paramètres de -\package{xlop}.\index{parametre@paramètre!modifications locales} -\`A ce propos, on notera également qu'un paramètre vide n'est pas -accepté. C'est tout à fait volontaire, l'auteur de l'extension pensant -qu'un utilisateur tapant des crochets sans rien mettre à l'intérieur -est sans doute en train de commettre une erreur. Pour pallier à cette -impossibilité de transmettre un paramètre vide -\index{parametre@paramètre!vide}% -il existe le paramètre particulier \parameter{nil} qui a exactement ce -rôle. +la macro pour protéger les modifications de paramètres de +\package{xlop}.\index{parametre@paramètre!modifications locales} +\`A ce propos, on notera également qu'un paramètre vide n'est pas +accepté. C'est tout à fait volontaire, l'auteur de l'extension pensant +qu'un utilisateur tapant des crochets sans rien mettre à l'intérieur +est sans doute en train de commettre une erreur. Pour pallier à cette +impossibilité de transmettre un paramètre vide +\index{parametre@paramètre!vide}% +il existe le paramètre particulier \parameter{nil} qui a exactement ce +rôle. \index{boucle|)} On notera enfin l'astuce \verb+{\setbox2=\box2}+ qui permet -d'obtenir un registre de boîte vide et les manipulations finales -permettant de représenter la barre verticale de façon lisible. +d'obtenir un registre de boîte vide et les manipulations finales +permettant de représenter la barre verticale de façon lisible. Le second exemple permet de calculer une fraction continue du type : \def\dfrac#1#2{\frac{\displaystyle #1}{\displaystyle #2}} \[a_0+\dfrac{1}{a_1+\dfrac{1}{a_2+\dfrac{1}{a_3+\cdots}}}\] -en donnant la suite $a_0,a_1,a_2,a_3,\ldots$ à la macro. L'exemple +en donnant la suite $a_0,a_1,a_2,a_3,\ldots$ à la macro. L'exemple donne les fractions correspondant au nombre d'or et aux racines -carrées de~2 et~3. +carrées de~2 et~3. \makeatletter \begin{CenterExample}[xrightmargin=0pt] \begingroup @@ -2361,33 +2494,33 @@ carrées de~2 et~3. \continuedfraction{1,1,2,1,2,1,2,1,2,1,2,1}{r}\opprint{r} \end{CenterExample} \makeatother -Une fois n'est pas coutume, nous avons fait appel à des commandes -\LaTeX{} pour effectuer une boucle. Ce manuel étant composé en -français, le caractère \og \texttt{\string:} \fg{} est actif ce qui -empêche la macro \verb+\@for+ de fonctionner correctement d'où le -groupe où ce caractère reçoit un code de catégorie adéquat. +Une fois n'est pas coutume, nous avons fait appel à des commandes +\LaTeX{} pour effectuer une boucle. Ce manuel étant composé en +français, le caractère \og \texttt{\string:} \fg{} est actif ce qui +empêche la macro \verb+\@for+ de fonctionner correctement d'où le +groupe où ce caractère reçoit un code de catégorie adéquat. -\section{Accès direct aux nombres} +\section{Accès direct aux nombres} \label{sec:Acces direct aux nombres} -Lorsqu'on récupère un nombre dans une variable, on peut le traiter de -multiples façons à l'aide des macros de \package{xlop}. Toutefois, +Lorsqu'on récupère un nombre dans une variable, on peut le traiter de +multiples façons à l'aide des macros de \package{xlop}. Toutefois, dans certaines situations, on peut souhaiter construire ses propres macros ou utiliser des macros externes en passant un tel nombre en -paramètre. +paramètre. -Passer directement \verb+\opprint{var}+ est inopérant car cette macro +Passer directement \verb+\opprint{var}+ est inopérant car cette macro est suffisamment complexe pour induire des effets de bord dans ce -genre de situations. Il devient alors nécessaire d'accéder directement -à ce nombre. Lorsqu'un nombre est mémorisé dans une variable -\verb+var+, \package{xlop} crée une macro +genre de situations. Il devient alors nécessaire d'accéder directement +à ce nombre. Lorsqu'un nombre est mémorisé dans une variable +\verb+var+, \package{xlop} crée une macro \texttt{$\backslash$Op@var}\index{Opvar@\texttt{\boi {Op\at var}}} qui contient ce nombre. On notera le \og O \fg{} majuscule et le \og p \fg{} -minuscule. L'arrobas est là pour rendre cette définition privée -c'est-à-dire qu'il faut faire un effort pour y accéder avec +minuscule. L'arrobas est là pour rendre cette définition privée +c'est-à -dire qu'il faut faire un effort pour y accéder avec l'utilisation des macros \macro{makeatletter} et \macro{makeatother} -de \LaTeX{} ou bien en indiquant un code de catégorie égal à~11 -(lettre) pour ce caractère lorsqu'on travaille sous \TeX{}. +de \LaTeX{} ou bien en indiquant un code de catégorie égal à ~11 +(lettre) pour ce caractère lorsqu'on travaille sous \TeX{}. \begin{SideBySideExample} \opcopy{1234}{a}\opcopy{56}{b}% \opmul*{a}{b}{r}% @@ -2397,66 +2530,64 @@ de \LaTeX{} ou bien en indiquant un code de catégorie égal à~11 \makeatother \end{SideBySideExample} -On notera que cette façon de faire ne fonctionne plus forcément -lorsque le séparateur décimal est entre accolade car la macro +On notera que cette façon de faire ne fonctionne plus forcément +lorsque le séparateur décimal est entre accolade car la macro \verb+\opprint{var}+ contiendra ces accolades. Dans ce cas, le plus -simple est de passer par la macro \macro{opexport} décrite à la +simple est de passer par la macro \macro{opexport} décrite à la page~\pageref{macro-opexport}. \chapter{Versions futures} \label{chap:Versions futures} -L'extension \package{xlop} en est à sa version~\fileversion{} qui -n'est qu'une version déboguée de la version~0.2 qui est elle même -essentiellement une version corrigée de la version~0.1 (première +L'extension \package{xlop} en est à sa version~\fileversion{} qui +n'est qu'une version déboguée de la version~0.2 qui est elle même +essentiellement une version corrigée de la version~0.1 (première version publique). La prochaine version sera la~0.3 dont la version \og stable \fg{} sera alors la version~0.4. -L'ensemble des spécificités de la version 0.3 n'est pas totalement -arrêté mais il y a déjà plusieurs points prévus : +L'ensemble des spécificités de la version 0.3 n'est pas totalement +arrêté mais il y a déjà plusieurs points prévus : \begin{itemize} -\item gestion internationale des opérations posées ; -\item opérations en base 2 à 36 ; +\item gestion internationale des opérations posées ; +\item opérations en base 2 à 36 ; \item ajout de fonctions de haut niveau avec les racines (\macro{oproot} pour les racines quelconques et \macro{opsqrt} pour - la racine carrée), exponentielle, logarithme, fonctions - trigonométriques (directes, inverses, hyperboliques) en passant par - l'extension \package{xfp} qui est une version déboguée (par + la racine carrée), exponentielle, logarithme, fonctions + trigonométriques (directes, inverses, hyperboliques) en passant par + l'extension \package{xfp} qui est une version déboguée (par l'auteur) de l'extension \package{fp} ; -\item ajout d'une macro permettant de réaliser une écriture formatée, - c'est-à-dire une écriture d'un nombre où les longueurs des parties - entière et décimale seront indiquées (si ces longueurs ne sont pas - celles du nombre, il y aura un débordement ou un remplissage) ; +\item ajout d'une macro permettant de réaliser une écriture formatée, + c'est-à -dire une écriture d'un nombre où les longueurs des parties + entière et décimale seront indiquées (si ces longueurs ne sont pas + celles du nombre, il y aura un débordement ou un remplissage) ; cette macro existait dans la version~0.1 et permettait essentiellement d'afficher des nombres avec un alignement sur la - virgule, au fer à droite ou au fer à gauche ; -\item ajout d'une macro permettant les additions à plus de deux - opérandes ; -\item ajout d'un paramètre permettant l'écriture scientifique ou - ingénieur ; -\item possibilité d'écrire un nombre sur plusieurs lignes et/ou en - utilisant un séparateur des milliers ; + virgule, au fer à droite ou au fer à gauche ; +\item ajout d'un paramètre permettant l'écriture scientifique ou + ingénieur ; +\item possibilité d'écrire un nombre sur plusieurs lignes et/ou en + utilisant un séparateur des milliers ; \item retenues dans les multiplications ; \item rendre publics les restes successives d'une division ; -\item les valeurs négatives de \parameter{maxdivstep} et - \parameter{safedivstep} réaliseront un comptage sur les chiffres - décimaux du quotient ; +\item les valeurs négatives de \parameter{maxdivstep} et + \parameter{safedivstep} réaliseront un comptage sur les chiffres + décimaux du quotient ; \item manuel en anglais. \end{itemize} Pour toute demande ou rapport de bogue, l'auteur vous sera -éternellement reconnaissant de le contacter à l'adresse : +éternellement reconnaissant de le contacter à l'adresse : \begin{verbatim} Jean-Come.Charpentier@wanadoo.fr \end{verbatim} -en plaçant le mot \og \texttt{xlop} \fg{} dans le sujet du message. +en plaçant le mot \og \texttt{xlop} \fg{} dans le sujet du message. Il serait souhaitable d'avoir un manuel du hacker qui expliquerait en -détail le code source. Cet outil pourrait être tout à fait bénéfique -pour que chacun puisse apporter plus facilement des améliorations au +détail le code source. Cet outil pourrait être tout à fait bénéfique +pour que chacun puisse apporter plus facilement des améliorations au code. Malheureusement, le code actuel fait plus de~\nombre{4000} -lignes et le travail nécessaire risque d'être trop important. -Éventuellement, il pourra y avoir un manuel du hacker expliquant les -spécifications générales du code sans entrer dans trop de détails +lignes et le travail nécessaire risque d'être trop important. +Éventuellement, il pourra y avoir un manuel du hacker expliquant les +spécifications générales du code sans entrer dans trop de détails techniques. %\printindex |