C'est parce que le processeur de la TI-83+ basique tourne à seulement 6MHz, contre 16MHz pour les autres.
Les TI-83/82Stats/76.fr ont aussi un processeur tournant à 6MHz, mais AutoCalc est encore plus lent sur ces modèles!!!
Pourquoi?...
AutoCalc est composé de divers sous-programmes codant des algorithmes destinés à chercher les formes exactes dans différents ensembles de nombres.
Parmi ces sous-programmes, il y en a qui sont appelés beaucoup plus souvent que d'autres:
- Z1FRAC, qui fait la même chose que la commande basique -Frac
- Z1RAC, qui simplifie un radical sous la forme a*rac(b)
AutoCalc sera donc sensiblement plus rapide en optimisant ces programmes.
C'est pour cela que dans les 3 versions, TI-83+/84+, TI-83/82Stats, et TI-76.fr, l'algorithme très simple de Z1RAC est codé en assembleur.
Parlons maintenant de Z1FRAC.
Il n'y a aucun moyen à ma connaissance en TI-Basic de récupérer les numérateur et dénominateur lorsque l'on utilise la commande -Frac.
Nous nous voyons donc condamné à coder un algorithme "lourd" de mise en fraction...
Ou alors d'utiliser de l'assembleur pour récupérer directement en mémoire les composantes du résultat de -Frac.
C'est cette dernière solution qui est mise en œuvre sur TI-83+/84+, car j'ai trouvé une routine toute faite en ce sens sur Internet.
Je n'ai pas pu trouver de routine équivalente sur TI-83/82Stats/76.fr, ces modèles n'étant pas compatibles avec les TI-83+ pour l'assembleur. Ils ont donc droit à l'algorithme basic complet, d'où la lenteur sur ces systèmes...
Et si, maintenant que j'en connais/comprends beaucoup plus sur ces calculatrices qu'il y a 2 ans, j'essayais de convertir le programme assembleur moi-même?
Les TI-83/82Stats/76.fr obtiendraient alors des performances identiques aux TI-83+ basiques avec AutoCalc!

Allons-y!
En désassemblant à la main le programme assembleur de mise en fraction TI-83+, j'obtiens ça:
- Code: Select all
b_call _ZeroOP1
ld hl, op1+1
ld (hl), 'W'
b_call _RclVarSym
b_call _ToFrac
b_call _PushRealO1
b_call _ZeroOP1
ld hl, 'W'
ld (op1+1), hl
b_call _StoOther
b_call _OP1ExOP2
b_call _PushRealO1
b_call _ZeroOP1
ld hl, 'I'
ld (op1+1), hl
b_call StoOther
RET
Voici les adresses mémoire TI-83+ de ces différentes mnémoniques, visibles en big-endian (à l'envers) dans le code:
- Code: Select all
OP1 = 8478h
_ZeroOP1 = 41C5h
_RclVarSym = 4AE3h
_ToFrac = 4657h
_PushRealO1 = 43BAh
_StoOther = 4AD4h
_OP1ExOP2 = 421Fh
Sauf erreur, voici maintenant leurs équivalents sur TI-83:
- Code: Select all
OP1 = 8039h
_ZeroOP1 = 428Eh
_RclVarSym = 4EECh
_ToFrac = 48D5h
_PushRealO1 = 4536h
_StoOther = 4ED8h
_OP1ExOP2 = 4306h
Je m'étais donc dit qu'en remplaçant les adresses directement dans le code, ça marcherait...
Et j'ai obtenu un "RAM Cleared", sur TI-76.fr et TI-83.
J'ai du faire une erreur, ou oublier un truc quelque part...