Rechercher
Connexion
Chatbox externe
Derniers sujets
Partenaires
TI-Planet | Espace-TI : Forum |
Faire un don à Tout-82...
Où va cet argent ?
Membres donateurs:- Persalteas (10€)
- Wistaro (5€)
- jo2geek (22€)
Les posteurs les plus actifs du mois
Aucun utilisateur |
Calcul de factorielle, avec les chiffres significatifs
5 participants
Page 1 sur 1
Calcul de factorielle, avec les chiffres significatifs
Salut, alors voilà mon algorithme, qui effectue bêtement ce qu'on fait à la main quand on calcule une factorielle: il pose les multiplications.
Je n'ai pas su trouver la méthode plus rapide pour laquelle 135! est une limite.
Mon algorithme ci-dessous est donc plus lent (7 minutes et 8 secondes pour calculer 135!) mais peut calculer jusqu'à 449! (997 chiffres significatifs).
En virant les zéros de fin de liste et en stockant leur nombre dans une variable, on pourrait étendre la portée de l'algorithme jusqu'à la factorielle qui possède 999 chiffres significatifs avant les zéros, ce qui est assez puissant, quand même. (mais que je n'ai pas fait dans le cadre du concours, c'était inutile... )
Bon, en plus de l'algo de base, j'ai ajouté des petits affichages graphiques pour occuper le correcteur, et un calcul du temps d'exécution.
Le programme permet de récupérer la liste contenant les chiffres du résultat dans Ans.
La ligne "dim(L1)-iPart(Ans/5)-iPart(Ans/25" sert à se passer des zéros en fin de liste, les calculer ne sert à rien, alors autant gagner de la vitesse. Une factorielle prend un zéro tout les 5! (à 5!, 10!, 15! ... etc) et un de plus tous les 25! , d'où cette ligne.
Autre remarque, le programme est optimisé pour la vitesse, pas pour le poids en octets, vous l'aurez remarqué
J'aimerais bien connaitre votre méthode, aussi, svp
Je n'ai pas su trouver la méthode plus rapide pour laquelle 135! est une limite.
Mon algorithme ci-dessous est donc plus lent (7 minutes et 8 secondes pour calculer 135!) mais peut calculer jusqu'à 449! (997 chiffres significatifs).
En virant les zéros de fin de liste et en stockant leur nombre dans une variable, on pourrait étendre la portée de l'algorithme jusqu'à la factorielle qui possède 999 chiffres significatifs avant les zéros, ce qui est assez puissant, quand même. (mais que je n'ai pas fait dans le cadre du concours, c'était inutile... )
prgmFACTDG a écrit::Input N
:getTime→L6
:ClrHome
:Disp "COMPUTING…
:Output(3,1,"*
:abs(iPart(real(N→N
:{1→L1
:For(A,2,N
: Output(2,1,A
: Output(4,1,L1
: AL1→L1
: A-1
: dim(L1)-iPart(Ans/5)-iPart(Ans/25
: For(C,Ans,1,‾1
: If 9<L1(C:Then
: If C=1:Then
: iPart(.1L1(C
: augment({Ans},L1→L1
: IS>(C,C:
: Else
: L1(C-1)+iPart(.1L1(C→L1(C-1
: End
: 10fPart(.1L1(C→L1(C
: End
: End
:End
:DelVar ADelVar CDelVar NClrHome
:Disp "SPENT TIME:","{H,M,S}",getTime-L6,"=
:L1
:DelVar L1Pause Ans
:ClrHome
Bon, en plus de l'algo de base, j'ai ajouté des petits affichages graphiques pour occuper le correcteur, et un calcul du temps d'exécution.
Le programme permet de récupérer la liste contenant les chiffres du résultat dans Ans.
La ligne "dim(L1)-iPart(Ans/5)-iPart(Ans/25" sert à se passer des zéros en fin de liste, les calculer ne sert à rien, alors autant gagner de la vitesse. Une factorielle prend un zéro tout les 5! (à 5!, 10!, 15! ... etc) et un de plus tous les 25! , d'où cette ligne.
Autre remarque, le programme est optimisé pour la vitesse, pas pour le poids en octets, vous l'aurez remarqué
J'aimerais bien connaitre votre méthode, aussi, svp
Dernière édition par persalteas le Jeu 6 Mar 2014 - 19:12, édité 1 fois
Re: Calcul de factorielle, avec les chiffres significatifs
Waw c'est beau! Tu as fait comment la colorationsyntaxique?
Et que-ce que le gettime() vient faire ici?
Et que-ce que le gettime() vient faire ici?
Re: Calcul de factorielle, avec les chiffres significatifs
Voilà ma version:
- Spoiler:
Dernière édition par Samos le Ven 7 Mar 2014 - 11:42, édité 2 fois
Samos- ----------------------
- Messages : 17
Points Concours : 18
Productivité : 10
Date d'inscription : 16/06/2013
Calculatrice(s) :- TI-82 Stats.fr
Re: Calcul de factorielle, avec les chiffres significatifs
On est pas sensé attendre les résultats en théorie avant de publier ?
Je poste quand même mon code : (EDIT: du coup j'ai fait pareil que Samos)
Je n'ai pas non plus compris la limite 135! ...
Je poste quand même mon code : (EDIT: du coup j'ai fait pareil que Samos)
- Spoiler:
- Code:
Prompt N
DelVar L5{0,E-9
For(C,1+2fPart(.5N),N,2
AnsC(C+1->L3 //Merci à Samos pour cette amélioration j'avais bêtement mis C²Ans+CAns->L3 ce qui me fait perdre 4 secondes
int(Ans->L4
dim(Ans->dim(L5
SortA(L5,L4
L4E-9+fPart(L3
If Ans(1
augment({0},Ans
End
E9Ans->L3
"N!=->Str1
{0,1->L1
Ans->L2
For(C,2,dim(Lƒ
L3(C->L2(2
LinReg(ax+b)Y
Equ>String(Y,Str0
length(Str0)-3->A
sub(Str0,1,A
For(B,1,(9-A)(C!=2
"0"+Ans
End
Str1+Ans->Str1
End
ClrAllLists
Pause Str1
Je n'ai pas non plus compris la limite 135! ...
Dernière édition par m@thieu41 le Ven 7 Mar 2014 - 14:12, édité 2 fois
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Calcul de factorielle, avec les chiffres significatifs
Je posterais bien le mien mais comme il ne fonctionne pas :-(
Samos: Tu peux expliquer comment fonctionne le tient stp? Merci.
Persalteas: Au lieu de passer par un Get_Time tu pourrais passer par un StartTmr. Tu stockes sa valeur avant l'exécution du programme, puis celle après le programme et tu fait une soustraction...Le temps est en seconde, mais ce n'est pas plus mal et tu gagnes quelques octets
Samos: Tu peux expliquer comment fonctionne le tient stp? Merci.
Persalteas: Au lieu de passer par un Get_Time tu pourrais passer par un StartTmr. Tu stockes sa valeur avant l'exécution du programme, puis celle après le programme et tu fait une soustraction...Le temps est en seconde, mais ce n'est pas plus mal et tu gagnes quelques octets
Re: Calcul de factorielle, avec les chiffres significatifs
m@thieu, tu fais combien en temps pour 135! ?
@Wistaro oui mais de toutes façons je te dis, le programme n'est pas optimisé en octets...
@Wistaro oui mais de toutes façons je te dis, le programme n'est pas optimisé en octets...
Re: Calcul de factorielle, avec les chiffres significatifs
Sur Wabbitemu (vitesse 100%): 28 secondes.
Sur ma calto (mémoire pleine): 56 secondes (le double...).
Je ne sais pas si: Wabbitemu est plus rapide avec la nouvelle version ou si c'est ma calto qui avec sa mémoire pleine et des piles pas pleines qui est plus lente...
Sur ma calto (mémoire pleine): 56 secondes (le double...).
Je ne sais pas si: Wabbitemu est plus rapide avec la nouvelle version ou si c'est ma calto qui avec sa mémoire pleine et des piles pas pleines qui est plus lente...
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Calcul de factorielle, avec les chiffres significatifs
@Wistaro
Le mien fonctionne d'une manière très simple et apparemment pas du tout optimisée
Le mien fonctionne d'une manière très simple et apparemment pas du tout optimisée
- Spoiler:
- D'abord, on calcule avec la TI ce qu'on peut calculer sans perdre de précision (J'ai peut-être fait des erreurs à ce sujet)
- Code:
For(A,22,N
AL1->L1
End
- Code:
If 740000000<max(L1
: Then
- Code:
For(B,1,dim(L1)-1
: .1L1(B→N
: L1(B+1)+iPart(N→L1(B+1
: 10fPart(N→L1(B
: End
: While 9≤L1(B
: .1L1(B→N
: 10fPart(N→L1(B
: iPart(N→L1(B+1
: B+1→B
: End
Et comme les 0 à la fin ne servent à rien, on les enlève- Code:
0
: Repeat L1(Ans
: Ans+1
: End
: Ans→N
: seq(L1(D),D,N,dim(L1→L1
: N-1+O→O
: End
après la première boucle, c'est du traitement pour l'affichage
Samos- ----------------------
- Messages : 17
Points Concours : 18
Productivité : 10
Date d'inscription : 16/06/2013
Calculatrice(s) :- TI-82 Stats.fr
Re: Calcul de factorielle, avec les chiffres significatifs
J'aurais eut besoin d'une formule pour connaitre le nombre de chiffres d'une factorielle, j'ai trouvé ceci:
⌊(log(2π)−2n+log(n)∗(1+2n))/(2log(10))⌋+1
ici: http://www.dcode.fr/calcul-factorielle
Mais je ne sais pas à quoi correspondent les ⌊⌋...
Quelqu'un a une idée?
⌊(log(2π)−2n+log(n)∗(1+2n))/(2log(10))⌋+1
ici: http://www.dcode.fr/calcul-factorielle
Mais je ne sais pas à quoi correspondent les ⌊⌋...
Quelqu'un a une idée?
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Calcul de factorielle, avec les chiffres significatifs
Nan c'est pas ça...
Ils auraient mis || de toute façon je pense...
Ils auraient mis || de toute façon je pense...
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Calcul de factorielle, avec les chiffres significatifs
ça correspond à l'arrondi à la valeur inférieure
Samos- ----------------------
- Messages : 17
Points Concours : 18
Productivité : 10
Date d'inscription : 16/06/2013
Calculatrice(s) :- TI-82 Stats.fr
Re: Calcul de factorielle, avec les chiffres significatifs
ouais, la partie entière.
ah oui, et j'ai mis 135 parce que un multiple de 5 ça fait plus classe, en théorie j'aurais pu aller jusqu'à 136, 137.
ah oui, et j'ai mis 135 parce que un multiple de 5 ça fait plus classe, en théorie j'aurais pu aller jusqu'à 136, 137.
noelthebest- Intéressé
- Messages : 83
Points Concours : 0
Productivité : 0
Date d'inscription : 02/06/2013
Re: Calcul de factorielle, avec les chiffres significatifs
Bah la formule n'est pas bonne alors...
Ah mais... Tu n'avais pas dis que 135 n'avait pas été choisi au hasard?
Ah mais... Tu n'avais pas dis que 135 n'avait pas été choisi au hasard?
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Calcul de factorielle, avec les chiffres significatifs
Non, il n'a pas été choisi au hasard. En fait, j'aurais pu aussi choisir 138 ou 139, je m'en rends compte avec le recul.
noelthebest- Intéressé
- Messages : 83
Points Concours : 0
Productivité : 0
Date d'inscription : 02/06/2013
Re: Calcul de factorielle, avec les chiffres significatifs
Moi je pensais que comme 135/2 = 67,5, on pouvait utiliser sa et que sa pouvait nous être utile...
Re: Calcul de factorielle, avec les chiffres significatifs
Mais pourquoi 135 138 ou 139? Pourquoi pas par exemple 120 ou 150?
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Calcul de factorielle, avec les chiffres significatifs
Aucune idée, comme vous
Donc à priori c'est m@thieu qui a le meilleur temps entre nous tous...
Fuu, tu va foncer vers le podium ! je suis jaloux
Donc à priori c'est m@thieu qui a le meilleur temps entre nous tous...
Fuu, tu va foncer vers le podium ! je suis jaloux
Re: Calcul de factorielle, avec les chiffres significatifs
Ah ça fait plaisir
je m'y attendais pas au début
Mais bon il reste encore la finale vous allez pouvoir me rattraper même si je vais faire mon possible pour que ça n'arrive pas
je m'y attendais pas au début
Mais bon il reste encore la finale vous allez pouvoir me rattraper même si je vais faire mon possible pour que ça n'arrive pas
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Sujets similaires
» Problème calcul avec listes
» Factorielle de Linkakro : Ticoncours BasicZ80 Tour2
» Calcul de Demie-Vie
» Programme calcul de résistances
» Priorités de calcul Axe Parser
» Factorielle de Linkakro : Ticoncours BasicZ80 Tour2
» Calcul de Demie-Vie
» Programme calcul de résistances
» Priorités de calcul Axe Parser
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Dim 16 Oct 2022 - 21:11 par Wistaro
» Bonne année 2018!
Ven 2 Nov 2018 - 19:42 par Ti64CLi++
» Lancement du TI-Concours 2017 !
Sam 20 Mai 2017 - 0:27 par Paulo1026
» Chaînes Youtube des membres
Ven 19 Mai 2017 - 22:41 par Wistaro
» cacul du taux d'intêret
Ven 24 Mar 2017 - 21:50 par m@thieu41
» [Projet] Un mario by tout82
Dim 29 Jan 2017 - 14:09 par Wistaro
» Cherche documentation assembleur TI82stat
Mer 25 Jan 2017 - 12:29 par Ti64CLi++
» Probleme Ti-82 Stats fr
Jeu 12 Jan 2017 - 13:56 par Ti64CLi++
» ROM 82 stats.fr
Jeu 15 Déc 2016 - 10:24 par Ti64CLi++