Page 1 of 4

Bonne fête de π et calcul de ses 996 premières décimales !

Unread postPosted: 15 Mar 2016, 00:04
by critor
Aujourd'hui 14 mars débute la semaine des mathématiques.

Attardons-nous un petit peu sur cette date qui nous donne en écriture numérique 14/03.
Au format de date américain cela nous donne 3/14, soit les premiers chiffres de π.
Et oui, nous sommes la journée de π et nous vous souhaitons donc une bonne fête de π. :)

C'est d'ailleurs une journée exceptionnelle, puisque l'écriture étendue 3/14/16 nous donne exceptionnellement cette année un arrondi à 5 chiffres correct du nombre π ! :bj:



Notre calculatrice TI-83 Premium CE nous donne une écriture décimale du nombre π à 10 chiffres : 3.141592654.

En fait, notre machine calcule sur des nombres à 14 chiffres et se contente d'afficher au maximum les 10 chiffres les plus significatifs.
Il nous suffit d'annuler les chiffres les plus significatifs pour obtenir ce que la calculatrice nous cache : pour elle, π est en réalité le nombre décimal à 14 chiffres 3.1415926535898. ;)



En réalité π n'est pas un nombre décimal. C'est-à-dire qu'il est impossible de l'écrire de façon exacte en écriture décimale, une telle écriture nécessitant une infinité de chiffres après la virgule.
Et si nous essayions donc d'obtenir à la calculatrice une meilleure approximation de π ?
Plusieurs algorithmes ou formules de calcul existent. Nous allons opter ce soir pour la formule de Machin datant de 1706 qui offre un bon compromis entre nombre d'opérations et convergence :
$mathjax$\pi=4\left(4arctan \frac{1}{5}-arctan\frac{1}{239}\right)$mathjax$


Faut-il encore développer un programme qui soit capable d'effectuer ces opérations sur des nombres à plus de 14 chiffres.
On peut par exemple représenter de tels nombres par des listes de chiffres, les listes pouvant avoir jusqu'à 999 éléments sur notre calculatrice.
Reste alors encore à programmer les différentes opérations chiffre à chiffre comme au primaire (ici l'addition, la soustraction, la multiplication, la division et l'arctangente), et c'est chose faite ci-contre avec notre nouveau programme ExtraPi ! ;)

Les derniers chiffres n'étant pas fiables selon une telle méthode, au final ExtraPi te permettra en théorie d'afficher jusqu'à 997 chiffres pour le nombre π ! :bj:
Nombre d'astuces seraient envisageables pour désintégrer cette limite.
En pratique, la TI-83 Premium CE arrive à te sortir les 20 premiers chiffres en une 30aine de secondes, mais en fait la progression n'est pas proportionnelle loin de là. :P



6775Le programme ExtraPi a une particularité originale : malgré l'usage de l'écran graphique c'est exactement le même code qui permet d'afficher aussi bien sur les anciens écrans monochromes 96x64 pixels que les nouveaux écrans couleur 320x240 pixels. :o
Il suffit pour cela de calculer les dimensions en pixels de l'écran utilisable avec par exemple 1+arrondir((Xmax-Xmin)/ΔX,0) ou 1+arrondir((Xmax-Xmin)/PasX,0) selon les modèles et d'en tenir compte. ;)
En pratique sur la TI-83 Premium CE j'ai souhaité attribuer une couleur différente à chaque chiffre pour donner une idée de la répartition de ceux-ci, et j'ai donc dû quand même fournir deux versions du sous-programme d'affichage, car les anciens modèles monochromes refusent bêtement la réception de tout programme contenant des instructions couleur (ce qui est d'autant plus regrettable que j'avais pris la peine de mettre des instructions conditionnelles pour ne pas exécuter les instructions couleur sur les modèles monochromes). :'(

Ci-dessus tu as donc une écriture décimale couleur à 200 chiffres du nombre π. Auras-tu le courage d'aller plus loin avec ta calculatrice TI-83 Premium CE ? ;)



Téléchargement : https://tiplanet.org/forum/archives_voir.php?id=457080

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 02:07
by Adriweb
critor wrote:les anciens modèles monochromes refusent bêtement la réception de tout programme contenant des instructions couleur (ce qui est d'autant plus regrettable que j'avais pris la peine de mettre des instructions conditionnelles pour ne pas exécuter les instructions couleur sur les modèles monochromes). :'(

Les tokens de "variables" couleurs agissent en fait comme une enum - tu peux simplement les remplacer par leur valeur numérique équivalente pour garder la compatibilité avec les vieux modèles :)

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 02:34
by critor
C'est un détail ça.

Il faut encore régler la couleur de texte.
As-tu donc plutôt une solution pour l'instruction CouleurTexte( ?

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 02:38
by Adriweb
Ah, probablement pas.
Ils auraient pu mettre ca en tant que dernier argument de Text(, par exemple... :#roll#:

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 07:01
by Wistaro
Très bon article !

J'avais déjà commencé à coder un calculateur de pi mais avec un autre algorithme. J'avais abandonné l'idée, le programme était trop lent...Le temps de calculer chaque décimale était énorme.

En revanche, je trouve que la méthode de Machin n'est pas la meilleure pour un algorithme, surtout en basic. En effet, la fonction artcan() ne peux pas être réalisée "à la main" comme les opérations de bases. On est obligé de passer par un arrondi de la calculatrice.
L'algorithmique que j'avais trouvé était certe long, mais au moins il n'utilisait que les 4 opération de bases, qu'il suffisait de faire "à la main".
Bref, c'était long, mais précis. La méthode de Machin est probablement plus rapide (je suppose), mais doit vite perdre en prévision au long des décimales.

Critor wrote:1+arrondir((Xmax-Xmin)/ΔX,0) ou 1+arrondir((Xmax-Xmin)/PasX,0)

Ça me rapelle le convertisseur ça :D
Si tout les programmes pouvaient utiliser la même méthode...

Adriweb wrote:Ah, probablement pas.
Ils auraient pu mettre ca en tant que dernier argument de Text(, par exemple... :#roll#:



Probablement pas, étant donné qu'on peut ajouter autant d'arguments de texte que l'on souhaite à la fonction Text(). Alors comment le programme aurait fait la différence entre "Text(1,1,99,10" qui affiche normalement "99 10" et "Text(1,1,99,10" qui affiche le texte "99" avec la couleur 10?

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 07:24
by Adriweb
Wistaro wrote:Probablement pas, étant donné qu'on peut ajouter autant d'arguments de texte que l'on souhaite à la fonction Text(). Alors comment le programme aurait fait la différence entre "Text(1,1,99,10" qui affiche normalement "99 10" et "Text(1,1,99,10" qui affiche le texte "99" avec la couleur 10?

Je sais que c'est variadique, mais il est simple de vérifier si ce sont des strings (directement ou via variable) qui sont passés, et puis, en dernier, un nombre/couleur, ou bien rien

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 11:59
by Ti64CLi++
Mais je ne comprends pas? Comment as-tu réussi à afficher plus de décimale que 10? C'est en ASM?

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 12:08
by noelnadal
Non, il n'a pas utilisé le système de gestion classique des flottants. A la place, il a codé (en Ti-Basic, si j'ai bien compris) un programme qui utilise une autre représentation des données, ici des listes. Si chaque terme correspond à une décimale, alors tu peux gérer 999 chiffres significatifs.

A noter que si on fait l'effort de stocker plusieurs décimales par "case" dans la liste, on peut passer à plusieurs miliers de décimales... :D
Il y avait eu un sujet similaire au TI-Concours 2014, où il fallait afficher tous les chiffres de la factorielle d'un nombre.

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 12:09
by Ti64CLi++
Oui, mais comment a-t-il fait pour trouver les décimales de pi?

Re: Bonne fête de π et calcul de ses 996 premières décimales

Unread postPosted: 15 Mar 2016, 12:11
by noelnadal
En utilisant la formule de Machin. T'as lu la news ? :P
Bon, pour les deux calculs d'arctan, j'imagine qu'il a utilisé le développement en série entière... à vérifier. :P