Étant donné une fonction réelle de variables réelles, existe-t-il un logiciel capable de générer automatiquement un code numérique précis pour calculer la fonction sur toutes les entrées d'une machine équipée de l'arithmétique IEEE 754?
Par exemple, si la fonction réelle à évaluer était:
Le logiciel prendrait en compte l'annulation catastrophique et éventuellement les recherches de table de sortie pour certains ensembles d'entrées afin d'éviter une perte de précision de calcul.
Sinon, existe-t-il un logiciel qui peut générer une routine de recherche basée sur une table pure pour calculer une fonction donnée avec une grande précision?
software
floating-point
accuracy
Daniel Trebbien
la source
la source
Réponses:
La meilleure solution que je connaisse est de programmer les expressions symboliques dans Mathematica , Maple ou SymPy ; tous les liens vont directement à la documentation de génération de code. Tous les programmes ci-dessus peuvent générer du code en C ou en Fortran.
Aucun des programmes ci-dessus ne mentionne l'exactitude dans l'arithmétique IEEE 754; en général, il serait difficile d'anticiper toutes les sources d'annulation catastrophiques, comme le note @dmckee. Il est difficile de remplacer l'expertise humaine en analyse numérique.
Pour fournir un exemple concret, envisagez de calculer les fonctions trigonométriques avec une grande précision pour des entrées arbitraires dans . Il existe de nombreuses stratégies pour le faire, certaines dépendant même du matériel, comme le montre l'article Wikipédia Tables trigonométriques . Tous les algorithmes nécessitent de l'ingéniosité et une analyse numérique, même des algorithmes qui dépendent des tables de recherche et des séries de Taylor ou de l'interpolation (voir l'article de Wikipedia The Table-Maker's Dilemma ). Pour plus de détails, voir la question de débordement de pile connexe Comment fonctionnent les fonctions trigonométriques? .[ 0 , 2 π]
Les logiciels qui génèrent du code ou des routines pour calculer des fonctions arbitraires avec une grande précision devraient non seulement être conscients des erreurs d'annulation, mais également des approximateurs de séries (Taylor, Padé, Chebyshev, rationnel, etc.) pour calculer des fonctions qui ne sont pas définies en termes de un nombre fini d'additions, de soustractions, de multiplications, de divisions et de décalages de bits. (Voir Théorie de l'approximation .)
la source
Si vous voulez avoir une idée de la distance qui nous sépare d'un tel progiciel, veuillez consulter la note de travail 2001 de LAPACK sur le calcul fiable et efficace des rotations Givens . Je m'attendrais à ce que la plupart des non-spécialistes (et de nombreux spécialistes!) En analyse numérique soient surpris de voir à quel point l'analyse a permis de résoudre un problème aussi simple:
la source
La génération de code et la précompilation d'expressions mathématiques deviennent de plus en plus populaires.
Alors que les packages symboliques tels que SymPy, Mathematica et Maple peuvent inclure la génération de code, je ne suis pas sûr que l'un d'entre eux pense également aux chiffres.
Il y a quelques autres projets sur lesquels on pourrait s'intéresser à la fois en symbolique et en numérique.
Theano est un tel projet axé sur les opérations de baie. Ils identifient et remplacent certaines opérations connues pour être numériquement mal conditionnées. Je ne suis pas certain que cela inclue votre cas spécifique, mais cela vaut la peine d'être examiné.
La spirale pourrait également vous intéresser. Ils précompilent également un arbre de syntaxe abstraite et recherchent également les problèmes numériques. Ils sont plus concernés par les opérations scalaires (comme votre exemple). Cependant, ils sont également assez spécialisés dans un domaine particulier.
La croissance dans ce domaine est cependant encourageante. On peut être optimiste que votre question aura une meilleure réponse dans quelques années.
la source
Pas en général, je peux dire en toute sécurité que l'implémenteur du générateur de code dans SymPy n'a même pas essayé = P.
Paolo Bientinesi a développé une méthode pour générer des preuves de stabilité d'algorithmes d'algèbre linéaire, qui sont générés en utilisant la notation FLAME de Robert van de Geijn.
Voir cet article ou une version plus longue de note de travail .
la source
Sage vous permet d'exprimer des formules en Cython (une variante de python qui génère du code C); cependant, en réponse à votre question plus générale: non. Considérez le théorème de Rice .
la source