Calculs

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 901
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Calculs

Message non lu par un bon petit »

Une macro est purement développable si
  • on peut la développer au maximum sans erreur, c'est à dire la mettre dans l'argument d'un \edef par exemple sans qu'elle ne produise d'erreur
  • le développement maximal produit les tokens qui sont affichés. On peut donc notamment mettre la macro entre \csname et \endcsname sous réserve que les tokens affichés sont permis entre ces 2 primitives.
Exemple 1
La macro \X définie par

Code : Tout sélectionner

\def\X{Bonjour \Y}
\def\Y{le monde}
est purement développable car si on développe la macro \X, on obtient "Bonjour le monde" :

Code : Tout sélectionner

\def\X{Bonjour \Y}
\def\Y{le monde}
\edef\foo{\X}
\meaning\foo
L'affichage produit bien : macro:->Bonjour le monde

Exemple 2
La macro \X définie par

Code : Tout sélectionner

\def\X{\num{123}}
n'est pas purement développable.
On peut pourtant la mettre dans un \edef : écrire \edef\foo{\X} ne produira aucune erreur.
Mais si on demande le résultat du développement maximal, on n'obtient pas "123" :

Code : Tout sélectionner

\def\X{\num{123}}
\edef\foo{\X}
\meaning\foo
On obtient macro:->\num {123}
Noter l'espace après \num : en réalité, on voit ici la macro \num (dont le nom contient un espace), c'est le mécanisme ultra-classique de création de commande robustes cher à LaTeX.

Pire, si on essaie de mettre \X entre \csname et \endcsname, on se prend une bordée d'injures car justement, la macro \num n'est pas purement développable.

Code : Tout sélectionner

\def\X{\num{123}}
\csname\X\endcsname
Conclusion : la macro \num n'étant pas purement développable, c'est un non sens que de définir \scientificB avec \NewExpandableDocumentCommand, il faut ici utiliser \newcommand ou bien \NewDocumentCommand.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1956
Inscription : samedi 29 décembre 2007, 00:58

Re: Calculs

Message non lu par projetmbc »

Bonsoir zariski63.

La vraie question serait de savoir ce que vous souhaitez faire.

Si c'est pour faire tout avec (La)TeX(3), il y a les réponses de l'expert en TeX.
Maintenant si c'est pour être efficace, il me semble que prendre le ou les bons outils adaptés à un contexte est un bon réflexe en informatique.

Un gars qui est entrain de laisser tomber TeX.
Dernière modification par projetmbc le dimanche 04 avril 2021, 22:05, modifié 1 fois.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 445
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: Calculs

Message non lu par zariski63 »

Tout d abord merci pour toutes vos réponses, c'est très instructif. Ensuite, j'adore TeX et tout ce qui tourne autour, les résultats sont tellement beaux que je me lasse jamais. Enfin si parfois car la maîtrise de la bête n'est vraiment pas à la portée de tous...

Aussi la dernière réponse m'interroge... Pourquoi en passe d'abandonner TeX ???
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1956
Inscription : samedi 29 décembre 2007, 00:58

Re: Calculs

Message non lu par projetmbc »

Parce que je n'ai pas le niveau et je préfère faire du vélo... :-)

LaTeX je garde par contre.
Dernière modification par projetmbc le dimanche 04 avril 2021, 22:06, modifié 1 fois.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 445
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: Calculs

Message non lu par zariski63 »

Ouf !!! 👍👍
MB
Administrateur
Administrateur
Messages : 7512
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Calculs

Message non lu par MB »

Bonjour, je reviens sur ce sujet pour ajouter quelques résultats comparatifs, adaptés de ceux réalisés par @un bon petit. Je retrouve les mêmes résultats pour le comparatif apnum/xfp et le comparatif xfp/lua confirme la plus grande performance du moteur lua pour tout type de calcul numérique.

Une compilation pdftex du fichier ci-dessous me donne l'affichage suivant.

Code : Tout sélectionner

\documentclass{article}
\def\benchmark#1{% 200 fois
	\pdfresettimer
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	\the\pdfelapsedtime\ secondes d'échelle%
}
\usepackage{xfp}
\input apnum.tex
\begin{document}
\parindent0pt
\apFRAC=15

\section{Calcul de $10-9 \times (8-7 \times 6+5 \times (4+2 \times 3)-2)+1$}

\def\Aapn{\evaldef\A{10-9*(8-7*6+5*(4+2*3)-2)+1}}
\def\Axfp{\edef\A{\fpeval{10-9*(8-7*6+5*(4+2*3)-2)+1}}}

\begin{itemize}\ttfamily%
\item apn: \Aapn\A\hfill(\benchmark{\Aapn})
\item xfp: \Axfp\A\hfill(\benchmark{\Axfp})
\end{itemize}

\section{Calcul de $\sqrt{3\cos\frac\pi{13}-2\sin\frac\pi7}$}

\def\Aapn{\evaldef\A{\SQRT{3*\COS{\PI/13}-2*\SIN{\PI/7}}}}
\def\Axfp{\edef\A{\fpeval{sqrt(3*cos(pi/13)-2*sin(pi/7))}}}

\begin{itemize}\ttfamily%
\item apn: \Aapn\A\hfill(\benchmark{\Aapn})
\item xfp: \Axfp\A\hfill(\benchmark{\Axfp})
\end{itemize}

\end{document}
pdftex_apn-vs-xfp.png
Une compilation luatex du fichier ci-dessous me donne le résultat suivant.

Code : Tout sélectionner

\documentclass{article}
\makeatletter
\def\benchmark#1{% 200 fois
	\pdf@resettimer
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1%
	\the\pdf@elapsedtime\ secondes d'échelle%
}
\makeatother
\usepackage{xfp,pdftexcmds}
\begin{document}
\parindent0pt

\section{Calcul de $10-9 \times (8-7 \times 6+5 \times (4+2 \times 3)-2)+1$}

\def\Axfp{\edef\A{\fpeval{10-9*(8-7*6+5*(4+2*3)-2)+1}}}
\def\Alua{\edef\A{\directlua{tex.sprint(10-9*(8-7*6+5*(4+2*3)-2)+1)}}}

\begin{itemize}\ttfamily%
\item xfp: \Axfp\A\hfill(\benchmark{\Axfp})
\item lua: \Alua\A\hfill(\benchmark{\Alua})
\end{itemize}

\section{Calcul de $\sqrt{3\cos\frac\pi{13}-2\sin\frac\pi7}$}

\def\Axfp{\edef\A{\fpeval{sqrt(3*cos(pi/13)-2*sin(pi/7))}}}
\def\Alua{\edef\A{\directlua{tex.sprint(math.sqrt(3*math.cos(math.pi/13)-2*math.sin(math.pi/7)))}}}

\begin{itemize}\ttfamily%
\item xfp: \Axfp\A\hfill(\benchmark{\Axfp})
\item lua: \Alua\A\hfill(\benchmark{\Alua})
\end{itemize}

\end{document}
luatex_xfp-vs-lua.png
MB. (rejoignez pCloud afin d'obtenir 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 445
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: Calculs

Message non lu par zariski63 »

Y a vraiment pas photo entre xfp et lua.
MB
Administrateur
Administrateur
Messages : 7512
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Calculs

Message non lu par MB »

En effet, même si la précision semble inférieure de deux chiffres, les calculs sont environ cent fois plus rapides.
MB. (rejoignez pCloud afin d'obtenir 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 901
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Calculs

Message non lu par un bon petit »

zariski63 a écrit : mardi 11 mai 2021, 12:50 Y a vraiment pas photo entre xfp et lua.
Évidemment !
Cette « comparaison » n'en est pas une puisque l'on compare 2 choses de nature totalement différentes. Un peu comme si on comparait les vitesses de calcul à la main de plusieurs personnes et qu'on vienne dire ensuite : « la calculatrice va beaucoup plus vite ». Ça serait enfoncer des portes ouvertes...

Il est pertinent de comparer les packages de calcul écrits en TeX, mais ils ne peuvent pas être comparés avec lua, python, sage ou autre. La grande force des packages écrits en TeX est
  • qu'ils peuvent être utilisés par tous les moteurs
  • qu'il sont passionnants à écrire car le calcul scientifique/entier n'est pas « embedded » en TeX
La tâche est triviale, sans aucun intérêt en lua et limité à un moteur qui embarque lua.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 445
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: Calculs

Message non lu par zariski63 »

C'est vrai aussi.