dc(1) General Commands Manual dc(1) NOM dc -- Une calculatrice de precision arbitraire SYNOPSIS dc [-V] [--version] [-h] [--help] [-e script] [--expression=script] [-f fichier_script] [--file=fichier_script] [fichier ...] DESCRIPTION dc est une calculatrice de bureau en notation polonaise inverse qui prend en charge une arithmetique de precision illimitee. Elle permet aussi de definir et d'appeler des macros. Normalement, dc lit l'entree standard ; si des arguments de commande sont fournis, ce sont des noms de fichier, et dc en lira et en executera le contenu avant de lire l'entree standard. Toute sortie normale s'effectue sur la sortie standard ; tout message d'erreur est envoye sur la sortie d'erreur. Une calculatrice en notation polonaise inverse stocke les nombres sur une pile. Entrer un nombre le place au sommet de la pile. Les operations arithmetiques depilent les arguments et empilent les resultats. Pour entrer un nombre dans dc, tapez les chiffres de 0 a 9 et de A a F pour representer les valeurs de zero a quinze (independamment de la base de l'entree actuelle), en incluant eventuellement un separateur unique entre les parties entiere et non entiere. La notation exponentielle n'est pas prise en charge. Pour entrer un nombre negatif, faites le preceder du caractere de soulignement << _ >>. Le signe moins << - >> ne peut pas etre utilise a cet effet, car il s'agit d'un operateur binaire utilise pour la soustraction. Pour entrer deux nombres successifs, separez-les par une espace ou un retour a la ligne. Ces derniers n'auront aucune signification en tant que commande. OPTIONS dc peut etre invoque avec les options de ligne de commande suivantes : -V --version Afficher la version de l'instance de dc en cours d'execution, une mention des droits d'auteur, puis quitter. -h --help Afficher un message d'utilisation enumerant ces options de ligne de commande, l'adresse pour l'envoi des rapports de bogue, puis quitter. -e script --expression=script Ajouter les commandes contenues dans script au jeu de commandes a executer lors du traitement de l'entree. -f fichier_script --file=fichier_script Ajouter les commandes contenues dans le fichier fichier_script au jeu de commandes a executer lors du traitement de l'entree. --max-recursion=profondeur Limiter la recursivite a la profondeur maximale specifiee (utilise principalement pour le debogage). Si des arguments autres que les options decrites ci-avant apparaissent sur la ligne de commande, ils seront interpretes comme des noms de fichier d'entree a traiter. Le nom de fichier << - >> fait reference a l'entree standard. Si aucun script ou fichier de script n'est specifie, c'est l'entree standard qui sera traitee. Commandes d'affichage p Afficher la valeur du sommet de la pile sans modifier cette derniere. Un retour a la ligne est ajoute apres la valeur. n Afficher la valeur du sommet de la pile tout en la depilant et sans ajouter de retour a la ligne apres la valeur. P Depiler la valeur du sommet de la pile. S'il s'agit d'une chaine, elle est simplement affichee sans retour a la ligne final. Sinon il s'agit d'un nombre et la partie entiere de sa valeur absolue est affichee comme une suite d'octets << base (UCHAR_MAX+1) >>. En supposant que (UCHAR_MAX+1) est egal a 256 (comme c'est le cas sur la plupart des machines avec des multiplets de 8 bits), la sequence KSK0k1/_1Ss [ls*]Sxd0>x [256~Ssd0qaPlxx] dsxxsx0sqLqsxLxLK+k pourrait aussi effectuer cette operation. La complexite du code propre a dc ci-avant est en grande partie due au fait que << ~ >> traite les caracteres en sens inverse et au souhait de s'assurer que tous les registres finissent par retrouver leurs etats initiaux. f Afficher la totalite du contenu de la pile sans modifier quoi que ce soit. C'est une commande utile si vous etes perdu ou souhaitez vous faire une idee de l'effet produit par une certaine commande. Arithmetique + Depiler deux valeurs, en faire la somme et empiler le resultat. La precision ne depend que des valeurs des arguments et est suffisamment grande pour un resultat exact. - Depiler deux valeurs, soustraire la premiere de la seconde et empiler le resultat. * Depiler deux valeurs, multiplier l'une par l'autre et empiler le resultat. Le nombre de chiffres apres la virgule du resultat depend de la valeur de la precision actuelle et du nombre de chiffres apres la virgule des deux arguments. / Depiler deux valeurs, diviser la seconde par la premiere et empiler le resultat. Le nombre de chiffres apres la virgule du resultat depend de la valeur de la precision. % Depiler deux valeurs, calculer le reste de la division de la seconde par la premiere et empiler le resultat. La valeur est la meme que celle qui serait calculee par la sequence Sd dld/ Ld*- . ~ Depiler deux valeurs et diviser la seconde par la premiere. Empiler tout d'abord le quotient, puis faire de meme avec le reste de la division. Le nombre de chiffres apres la virgule du resultat depend de la valeur de la precision. La sequence SdSn lnld/ LnLd% pourrait aussi effectuer cette operation avec un traitement des erreurs legerement different. ^ Depiler deux valeurs et en calculer l'exponentielle en utilisant la premiere valeur comme exposant et la seconde comme base. La partie non entiere de l'exposant est ignoree. Le nombre de chiffres apres la virgule du resultat depend de la valeur de la precision. | Depiler trois valeurs et en calculer l'exponentiation modulaire. La premiere valeur est la reduction modulaire ; il doit s'agir d'un nombre entier different de zero. La seconde valeur est l'exposant ; il doit s'agir d'un nombre superieur ou egal a zero dont la partie non entiere sera ignoree. La troisieme valeur est la base, objet de l'exponentiation, qui doit etre un nombre entier. Pour les petits nombres entiers, la sequence Sm^Lm% pourra effectuer la meme operation, mais a la difference de ^, cette commande fonctionnera avec des exposants de grandeur quelconque. v Depiler une valeur, en calculer la racine carree et empiler le resultat. Le nombre de chiffres apres la virgule du resultat depend de la valeur maximale de la precision et de la precision de l'argument. La plupart des operations arithmetiques sont affectees par la << valeur de precision >> qui peut etre definie a l'aide de la commande k. La valeur de precision par defaut est zero ; avec cette valeur, toutes les operations arithmetiques, l'addition et la soustraction n'etant pas concernees, produiront des resultats entiers. Controle de la pile c Vider la pile. d Dupliquer la valeur au sommet de la pile et en empiler une autre copie. Ainsi, << 4d*p >> calcule 4 au carre et affiche le resultat. r Inverser l'ordre des deux valeurs du sommet de la pile (les echanger). La sequence SaSbLaLb permet d'effectuer la meme operation. R Depiler l'element du haut de la pile sous forme d'un entier n. Effectuer une rotation cyclique des n elements au sommet de la pile depilee. Si n est positif, la direction de la rotation fera que l'element au sommet de la pile deviendra le second a partir du sommet ; si n est negatif, la direction de la rotation fera que l'element au sommet de la pile deviendra l'element de rang n a partir du sommet. Si la hauteur de la pile est inferieure a n, la rotation s'effectuera sur l'ensemble de la pile (dans la direction appropriee), sans generer de signalement d'erreur. Registres dc fournit au moins 256 registres en memoire, chacun d'entre eux etant nomme a l'aide d'un unique caractere. Il est ainsi possible de stocker un nombre ou une chaine dans un registre et les retrouver plus tard. sr Depiler une valeur et stocker cette derniere dans le registre r. lr Faire une copie de la valeur stockee dans le registre r et empiler le resultat. Si le registre n'a pas ete initialise, la valeur copiee sera 0. Cette operation ne modifie pas le contenu du registre r. Chaque registre contient aussi sa propre pile. La valeur actuelle du registre correspond a la valeur du sommet de la pile du registre. Sr Depiler la pile principale et placer la valeur obtenue au sommet de la pile du registre r. La valeur precedente du registre devient inaccessible. Lr Depiler la pile du registre r et placer la valeur obtenue au sommet de la pile principale. La valeur precedente de la pile du registre, si elle existe, peut maintenant etre lue a l'aide de la commande lr. Parametres dc possede trois parametres permettant de controler ses operations : la precision, la base de l'entree et la base de la sortie. La precision indique le nombre de chiffres apres la virgule a conserver dans le resultat de la plupart des operations. La base de l'entree controle l'interpretation des nombres entres ; tous les nombres entres seront dans cette base. La base de la sortie controle l'affichage des nombres. Les bases de l'entree et de la sortie sont des parametres distincts ; elles peuvent etre differentes, ce qui peut s'averer utile ou source de confusion. La base de l'entree doit etre comprise entre 2 et 16 inclus. La valeur minimale de la base de la sortie est 2. La valeur minimale de la precision est 0. Cette derniere est toujours mesuree en chiffres decimaux, quelles que soient les bases de l'entree et de la sortie actuelles. i Depiler une valeur et l'utiliser pour definir la base de l'entree. o Depiler une valeur et l'utiliser pour definir la base de la sortie. k Depiler une valeur et l'utiliser pour definir la precision. I Empiler la base de l'entree actuelle. O Empiler la base de la sortie actuelle. K Empiler la precision actuelle. Chaines Comme il peut operer sur des nombres, dc peut aussi operer sur des chaines, mais de maniere limitee. Les seules operations possibles sur les chaines sont l'affichage et l'execution en tant que macro (ce qui signifie que le contenu de la chaine sera traite comme une commande de dc). Tous les registres et la pile peuvent contenir des chaines, et dc saura toujours si un objet donne est un nombre ou une chaine. Certaines commandes comme les operations arithmetiques attendent des nombres comme arguments et afficheront une erreur si ces derniers sont des chaines. D'autres commandes acceptent un nombre ou une chaine ; par exemple, la commande p accepte l'un ou l'autre et affichera l'objet en fonction de son type. [caracteres] Construire une chaine contenant les caracteres specifies (entoures de crochets ouvrant [ et fermant ]) et empiler le resultat. Par exemple, [toto]P affichera la chaine toto (sans retour a la ligne). a Depiler une valeur. S'il s'agit d'un nombre, son octet de poids faible est converti en chaine et le resultat est empile. Sinon il s'agit d'une chaine, et le premier caractere de cette derniere est empile. Note : cette commande est obsolete ; voir dc.info pour les details. Si vous utilisez la commande a et pensez qu'elle devrait etre conservee dans GNU dc, redigez un rapport de bogue pour demander son maintien. x Depiler une valeur et l'executer en tant que macro. Normalement, il doit s'agir d'une chaine ; s'il s'agit d'un nombre, il sera simplement empile a nouveau. Par exemple, [1p]x executera la macro 1p qui empile la valeur 1 et affiche 1 sur une ligne separee. Les macros sont le plus souvent stockees dans des registres ; [1p]sa stocke la macro qui affiche 1 dans le registre a et lax invoque cette macro. >r Depiler deux valeurs et les comparer en supposant qu'il s'agit de nombres et en executant le contenu du registre r en tant que macro si la premiere valeur au sommet de la pile est superieure a la seconde. Par exemple, 1 2>a invoquera le contenu du registre a, alors que 2 1>a ne l'invoquera pas. !>r Similaire a la commande precedente, a la difference que la macro du registre r sera invoquee si la premiere valeur au sommet de la pile n'est pas superieure (est inferieure ou egale) a la seconde. est prioritaire, et que si vous souhaitez executer une commande commencant par <, = ou >, vous devrez ajouter une espace apres le << ! >>. # Le reste de la ligne sera considere comme un commentaire. :r Depiler deux valeurs, puis stocker la seconde dans le tableau r avec un indice egal a la premiere valeur. ;r Depiler une valeur et l'utiliser comme indice pour extraire la valeur correspondante dans le tableau r et empiler le resultat. Notez que chaque instance d'un registre dans la pile comporte non seulement sa valeur scalaire (un nombre ou une chaine), mais aussi un tableau du meme nom. Ainsi, 1 0:x 0Sx 2 0:x Lx 0;xp affichera 1, car le 2 a ete stocke a l'indice 0 d'une instance du tableau x qui a ete depilee par la suite, ce qui a eu pour effet d'exposer a nouveau l'instance de x qui contient un 1 a l'indice 0. VARIABLES D'ENVIRONNEMENT DC_LINE_LENGTH Cette variable permet de definir la colonne a laquelle les sorties numeriques sont decoupees ; la valeur par defaut est 70. Si elle est definie a 0, le decoupage sera desactive et chaque ligne en sortie sera aussi longue que necessaire pour representer le nombre. DC_PROMPT Cette variable permet de definir une invite a utiliser lorsque dc attend une entree interactive sur l'entree standard. BOGUES Envoyez vos rapports de bogue a bug-dc@gnu.org. VOIR AUSSI Des informations plus completes sont disponibles dans dc.info auxquelles il devrait etre possible d'acceder (en fonction de votre installation locale) en invoquant la commande info dc. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Projet GNU 5 janvier 2025 dc(1)