Le modèle que j'ai sous les yeux est une TI-89 avec le hardware version 2, probablement produite en 1999. Son cœur, à base de Motorola 68000, a été porté à 12 MHz. Après les premiers instants d'hésitation, classiques avec les calculettes haut de gamme, on apprécie la convivialité remarquable de l'engin. Bien entendu, la lecture du manuel, encore en version papier à l'époque, restera bien souvent obligatoire. Le TI-Basic 68k est un langage "facile". Il est néanmoins plus puissant que le TI-83 Basic qui est une variante plus répandue, grâce à son positionnement bas de gamme.
Pour parler un peu d'ergonomie, globalement bonne sur cette TI, on peut tout de même regretter que la saisie alphanumérique soit un peu laborieuse. Mais c'est comme sur toutes les calculettes graphiques à la disposition verticale. Dans le même ordre d'idée, certaines polices microbiennes manquent parfois un peu de lisibilité à l'écran, tout comme la sérigraphie du clavier, qui reste néanmoins dans la norme. Enfin, dernier détail, je trouve dommage que la séquence [Off] puis [On] ne revienne pas exactement dans le même contexte logiciel. Par exemple, on ne revient pas sur le "Program editor" après Off/On, mais directement sur l'écran "Home". Étonnamment, cette même fonctionnalité est bien active lorsqu'on laisse la mise en veille automatique agir, puis que l'on rallume la machine.
Une TI-89 hardware version 2 |
Comme à l'habitude, pour compléter ce test, j'utilise mon programme de test de primalité simpliste :
premier(n)
Prgm
int(\/(n))->j
If fPart(n/2)=0 Then
Disp 2
Else
For i,3,j,2
If fPart(n/i)=0 Then
Disp i
Return
EndIf
EndFor
Disp 1
Endif
EndPrgm
Caractères spéciaux :
\/ correspond à la touche racine carrée
-> correspond à la touche STO>
Le test sur 524287 s’exécute sur la TI-89 en un peu moins de 7 secondes ; un score un peu meilleur que la TI-92, et équivalent à la TI-85. Pour aller un peu plus loin cette fois-ci dans les tests de performance, j'ai écrit un programme de recherche des nombres de Keith. Ils sont beaucoup plus rares que les nombres premiers, et il n'existe pas de formule directe pour les trouver. La seule méthode connue actuellement reste donc la recherche exhaustive. À partir de la saisie d'un entier n1 quelconque, le programme ci-dessous teste si n1 est un nombre de Keith, ou bien affiche le nombre de Keith immédiatement suivant.
mpo39(n1)
Prgm
newList(10)->n
Loop
int(log(n1))+1->l
n1->m
0->s
For i,l,1,(-)1
mod(m,10)->n[i]
s+n[i]->s
int(m/10)->m
EndFor
Loop
i+1->i
If i>l
1->i
2*s-n[i]->m
s->n[i]
m->s
If s>=n1
Exit
EndLoop
If s=n1
Exit
n1+1->n1
EndLoop
Disp string(s)&" est un Keith"
EndPrgm
Caractères spéciaux :
-> correspond à la touche STO>
(-) correspond à la touche grise (-)
Commentaires sur les variables :
- 'l' correspond au nombre de chiffres de 'n1'
- la liste 'n' contient les chiffres de 'n1'
- 's' contient la somme des chiffres de 'n1'
- ensuite, à partir du deuxième Loop, 'n' contient les termes de la suite de Keith (une sorte de suite de Fibonacci). Pour optimiser le calcul de la somme, j'ai considéré la formule suivante :
n[i] = 2*n[i-1] - n[i-l]
Avec la commande "Disp" (avant-dernière ligne du programme), je souhaitais afficher le résultat (variable et texte) sur une ligne unique. J'ai découvert que ce n'est ni trivial, ni spécialement bien documenté dans le manuel Texas. Le symbole '&' est accessible indirectement, via un menu et la touche [CHAR].
J'avais posté ma version en Basic Casio des années 80 sur le forum Silicium.org en 2014. Elle est certes plus compacte, mais moins bien structurée :
10 DIM N(10)
20 INPUT"N?",N1
30 L=INT(LOG N1)+1:M=N1:S=0
40 FOR I=L TO 1 STEP-1
50 N(I)=M MOD10:S=S+N(I):M=INT(M/10):NEXT
60 I=I+1:IF I>L THEN I=1
70 M=2*S-N(I):N(I)=S:S=M:IF S<N1 THEN60
80 IF S=N1 THEN BEEP:PRINT S;"est un Keith":END
90 N1=N1+1:GOTO30
Enfin, pour comparaison dans la catégorie 68k, voici une version de 28 lignes en GFA Basic pour Atari ST :
DIM n%(10)
DO
INPUT "N?",n1%
PRINT TIME$;" ";
DO
l%=INT(LOG10(n1%))+1
m%=n1%
s%=0
FOR i%=l% TO 1 STEP -1
n%(i%)=m% MOD 10
ADD s%,n%(i%)
DIV m%,10
NEXT i%
REPEAT
INC i%
IF i%>l%
i%=1
ENDIF
m%=SHL(s%,1)
SUB m%,n%(i%)
n%(i%)=s%
s%=m%
UNTIL s%>=n1%
EXIT IF s%=n1%
INC n1%
LOOP
PRINT s%;" est un Keith. ";TIME$
LOOP
Avec le nombre 7000 en entrée, les temps de calcul jusqu'au nombre de Keith suivant (7385) sont les suivants :
- 7min52s sur Casio FX-850P
- 3min58s sur TI-89
- 2min12s sur Casio Z-1
- 4s sur Atari 1040 STF (GFA Basic interprété)
Calcul des nombres de Keith en GFA Basic sur Atari ST |
Ce résultat ne peut donc que confirmer la relative lenteur du TI-Basic. Et, malheureusement, la TI-89 d'origine n'embarque pas d'autre langage qui puisse être exploité sans faire appel à un ordinateur externe.
Aucun commentaire:
Enregistrer un commentaire