J'ai récupéré la définition d'une commande qui permet par exemple de poser facilement une conversion d'un nombre décimal en nombre binaire : \documentclass{article} \usepackage{intcalc} \usepackage{tikz} \usetikzlibrary{calc} \newcommand{\divisions}[2]{% % #1 = n -- #2 = base \begin{tikzpicture} \pgfmathsetmacro{\divQ}{ \intcalcDiv{#1}{#2} } \pgfmathsetmacro{\divR}{ \intcalcMod{#1}{#2} } \foreach \i in {0,...,#1} {% \pgfmathsetmacro{\intensite}{10*(\i+1)} \node (a\i) at (\i, -\i) {\ifnum\i=0$#1$\fi} ; \node (b\i) at (\i+1, -\i) {$#2$} ; \node (q\i) at (\i+1, -\i-1) {$\divQ$} ; \node[fill=red!\intensite] (r\i) at (\i, -\i-1) {$\divR$} ; \draw[thick] ($ (a\i)!.5!(b\i) $) -- ++(0,-1) ; \draw[thick] ($ (a\i)!.5!(q\i) $) -- ++(1,0) ; \ifnum \divQ<1 \breakforeach \else \xdef\divR{ \intcalcMod{\divQ}{#2} }; \xdef\divQ{ \intcalcDiv{\divQ}{#2} }; \fi } % end foreach \end{tikzpicture} } \begin{document} \divisions{57}{2} \end{document} Mais existe-t-il un package qui est spécialisé dans ce genre de choses (la présentation des nombres binaires et leur manipulation) et qui soit paramétrable avec des options ? |
\documentclass{article} \usepackage{intcalc} \usepackage{tikz} \usetikzlibrary{calc} \usepackage{siunitx} \usepackage{xintbinhex} \sisetup{digit-group-size =4} \newcommand{\divisions}[2]{% % #1 = n -- #2 = base \begin{tikzpicture} \pgfmathsetmacro{\divQ}{ \intcalcDiv{#1}{#2} } \pgfmathsetmacro{\divR}{ \intcalcMod{#1}{#2} } \foreach \i in {0,...,#1} {% \pgfmathsetmacro{\intensite}{10*(\i+1)} \node (a\i) at (\i, -\i) {\ifnum\i=0$#1$\fi} ; \node (b\i) at (\i+1, -\i) {$#2$} ; \node (q\i) at (\i+1, -\i-1) {$\divQ$} ; \node[fill=red!\intensite] (r\i) at (\i, -\i-1) {$\divR$} ; \draw[thick] ($ (a\i)!.5!(b\i) $) -- ++(0,-1) ; \draw[thick] ($ (a\i)!.5!(q\i) $) -- ++(1,0) ; \ifnum \divQ<1 \node (Resultat) at (\i+4,-\i-1) {$(#1)_{10}=(\num{\xintdectobin{#1}})_{2}$}; \breakforeach \else \xdef\divR{ \intcalcMod{\divQ}{#2} }; \xdef\divQ{ \intcalcDiv{\divQ}{#2} }; \fi } % end foreach \end{tikzpicture} \vspace{1 cm} } \begin{document} \divisions{92}{2}\newline \divisions{1}{2}\newline \divisions{16383}{2}\newline \end{document} J'ai modifié la définition pour que la commande affiche directement le résultat à côté de l'opération. La commande n'est cohérente que pour la conversion vers le binaire alors qu'au départ elle valable pour toutes les bases (voir le second paramètre) J'ai une erreur Mmmh... j'ai du mal à suivre. Cette réponse remplace-t-elle la précédente ? Oui 16384 est une limite de TeX. En effet, dans une tikzpicture c'est une longueur de plus de 5 mètres. Une solution pour contourner ce problème est de redéfinir votre commande, par exemple, comme suit:
@Pathe oui cette réponse remplace la précédente. J'ai présenté ainsi parce que pense que si j'édite la réponse initiale, on ne comprends plus rien aux commentaires qui ont permis d'élaborer la réponse finale @touhami. Le nombre de divisions de x par 2 nécessaires pour obtenir un quotient nul est la partie entière inférieure du logarithme binaire de x, auquel on ajoute 1
Comme la boucle commence à zéro (ce qui rajoute un tour de boucle) le +1 est du à ce départ et finalement il suffit de prendre pour définir x
Et on veut plutôt que ce soit le nombre de division par 2 du nombre converti (le premier paramètre de la commande) pour le cas ou il est supérieur à 16384
Le logarithme binaire de x Le logarithme binaire est calculé avec le logarithme népérien J'aimerai mettre une option à la commande sous forme de lettres pour pouvoir choisir la position de l'écriture du résultat final. Par exemple :
etc .. Comment peut-on indiquer une option de cette nature dans la définition de la commande ? Il est préférable de poser une nouvelle question. Entendu. Juste une remarque sur cette erreur. On dirait que TikZ calcule la position de noeuds qui ne sont pas utilisés parce que le Comparer
Affichage de 5 parmi 10
Afficher 5 commentaire(s) en plus
|
@idefix : la commande
\binary{}
du package fmtcount me semble faire ça.Sur ConTeXt, il y a la commande lua
utf.values()
. Je ne sais pas si elle est accessible depuis un document LuaTeX.