Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Comment valider un calcul de constante mathématique?
Envoyé par: AlainLyon

Comme j'ai du temps libre en ce moment je développe une calculette scientifique dont la précision numérique est "à volonté". Bien entendu la volonté est limitée par la complexité des algorithmes et les performances de la machine. Je suis ainsi
en mesure de produire un calcul de la constante de Neper appelée e sur 300 décimales. Je me pose alors la question de la validation des calculs, comment vérifier qu'ils produisent le bon résultat? De manière générale les mathématiciens
sont capables de produire des calculs de constante (pi par exemple) sur des millions de décimales. Comment prouvent ils que leur résultat est le bon?
Par des publications (théorèmes) et une preuve de programme?
Si quelqu'un a une idée de tout cela qu'il m'envoie des liens sur des sites pertinents.

Poste le Wednesday 1 November 2006 20:55:16
Répondre     Citer    
Re: Comment valider un calcul de constante mathématique?

Je n'ai pas compris où vois tu un problème. Considere la formule classique donnant e comme somme des inverses des factorielles. Il existe des majorants de l'erreur au dela du n-ieme terme. A partir de là coder un programme qui calcule d'après cette formule me parait assez simple, il suffit de savoir faire les operations de base en précision arbitraire.

La preuve informelle d'un tel programme devrait etre assez simple, et même sa preuve formelle devrait être faisable (même si elle est fastidieuse).

Il est beaucoup plus difficile (c'est tout juste l'état de l'art) de prouver un programme informatiquement plus complexe, comme un compilateur. Voir les papiers récents de X.Leroy [gallium.inria.fr]

La difficulté pour le calcul de beaucoup de décimales de Pi ou e ou autre nombre, c'est de trouver des algorithmes efficaces pour calculer des centaines de millions de chiffres décimaux. [v]Je n'y connais rien, mais il existe une littérature à ce sujet[/v]

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Wednesday 1 November 2006 23:13:17
Répondre     Citer    
Re: Comment valider un calcul de constante mathématique?
Envoyé par: AlainLyon

Citation
Basile STARYNKEVITCH
Je n'ai pas compris où vois tu un problème.
Considere la formule classique donnant e comme
somme des inverses des factorielles. Il existe des
majorants de l'erreur au dela du n-ieme terme. A
partir de là coder un programme qui calcule
d'après cette formule me parait assez simple, il
suffit de savoir faire les operations de base en
précision arbitraire.
C'est ce que j'ai fait mais le problème est dans "il
suffit de savoir faire les operations de base en
précision arbitraire". Comme ma calculette définit comme opérations de bases addition multiplication et division tronquée à un ordre donnée (cette pseudo division est la seule envisageable pour des raisons de finitude) j'ai voulu réutiliser ces opérations de base pour la série de l'inverse des factorielles. Cependant pour diminuer la complexité des algorithmes, donc le temps de calcul, le nombre de décimales varient avec le n du terme général 1/n! de la série de l'exponentielle et du coup j'aimerais par flemme comparer avec des résultats dument validés. Une autre approche serait d'utiliser la théorie des nombres pour obtenir les entiers p et q tels que p/q=1+1/1!+....+1/n! pour ensuite appliquer l'algo de la division de deux entiers. Je n'ai pas essayé tout simplement pour pouvoir réutiliser le code des opérations élémentaires : c'est un choix arbitraire, économique en codage de programme, mais cela ne produit qu'un algo de complexité polynomiale.

Poste le Thursday 2 November 2006 00:36:50
Répondre     Citer    
Re: Comment valider un calcul de constante mathématique?
Envoyé par: Sve@r

Citation
AlainLyon
C'est ce que j'ai fait mais le problème est dans
"il suffit de savoir faire les operations de base en
précision arbitraire". Comme ma calculette définit
comme opérations de bases addition multiplication
et division tronquée à un ordre donné

Qu'est ce qui t'empêche de coder les opérations comme on l'apprend à l'école ?
Je me suis amusé à coder en shell la division telle qu'on l'apprend au primaire
- Je pose le dividende et le diviseur
- J'élimine la virgule du diviseur en multipliant le dividende d'autant
- Je divise en euclidien le début du dividende par le diviseur
- Je calcule et pose le reste
- Je descend le chiffre suivant du dividende que je pose à coté du reste
- Je redivise le nombre formé par le diviseur
- Je recalcule et repose le reste etc etc
Le résultat me donne une division exacte "à l'infini"...

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Tuesday 7 November 2006 20:09:13
Répondre     Citer    
Re: Comment valider un calcul de constante mathématique?
Envoyé par: AlainLyon

Citation
Sve@r
Qu'est ce qui t'empêche de coder les opérations
comme on l'apprend à l'école ?
C'est ce exactement que je fais, mais comme je l'ai écrit l'algorithme (du calcul de e) est polynomial en n, où n est le nombre de décimales désirées. Ce qui en temps de calcul est mauvais sur un PC dès que l'on fait un calcul sur plusieurs centaines de décimales (à partir de 300), d'où mon idée de chercher dans les résultats théorie des nombres (calculs sur des corps finis par exemple) s'il est possible de trouver des algos polynomiaux de moindre degré ou linéaires (Si tant est que cela est possible théoriquement)

Poste le Tuesday 7 November 2006 20:55:07
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Comment valider un calcul de constante mathématique?
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons