dimanche 31 mars 2019

Le best-seller des années 80 : la TI-57

Texas Instruments présenta sa fameuse TI-57 en 1977. Elle a tant marqué sa génération qu'elle en est aujourd'hui devenue incontournable pour tout collectionneur qui se respecte. Son succès durera une bonne dizaine d'années grâce à son prix plancher sur le segment des scientifiques programmables. La TI-57 que j'ai sous les yeux a été fabriquée en Italie. Quatre chiffres dans son numéro de série, gravé au dos, représentent la semaine et l'année de production. La mienne est donc sortie de l'usine la semaine 17 de 1981. Elle aura probablement été vendue en France dans la foulée, pour la modique somme de 205 Francs ; soit moins de la moitié du prix de la Casio FX-502P ou de la HP-33 (source : l'Ordinateur de poche numéro 1). Les autres calculatrices de la même génération, avec plus de mémoire, parfois non volatile, étaient en effet beaucoup plus chères ; voire inaccessibles. Une HP-41C, par exemple, valait 1430 Francs en 1981.

TI-57 versus HP-25

Avec quelques touches en plus, la TI-57 est légèrement plus grande qu'une HP-25, mais son ergonomie n'est pas déroutante. Le principe de l'inclinaison de son écran vers l'utilisateur sera repris sur plusieurs modèles TI ultérieurs. La sérigraphie est bien contrastée, plus aérée que sur les Casio. On peut avoir jusqu'à trois fonctions par touches avec les combinaisons de [2nd] et de [INV]. Mais si on évoque le confort d'utilisation, il faut bien avouer que le clavier de la Texane est raide. J'ai mesuré plus de 270 grammes de pression en moyenne sur les touches avec ma balance de cuisine. Pour comparer avec la pression à exercer sur une machine récente, on se rapproche de la fermeté du clavier de la DM42, avec le bruit du plastique dur en plus sur la TI. Par ailleurs, l'interrupteur à glissière de la TI-57 est épouvantable.

En 2019, la TI-57 se trouve encore facilement sur les sites d'annonces. Bien entendu, en quarante ans, de l'eau a coulé sous les ponts ; et il arrive donc fréquemment qu'elle soit incomplète (sans manuel, sans chargeur, ou sans housse). Quant à ses accumulateurs Ni-Cd originaux, ils sont en général bons pour le recyclage. Le problème s'aggrave lorsque l'électrolyte des accus, à l'hydroxyde de potassium corrosif, fuit dans le boitier. Le premier module à souffrir est le redresseur intégré dans le compartiment batterie. Avec peu de composants, ce circuit possède deux fonctions :
  1. transformer le courant 8,5 V alternatif en sortie du chargeur Texas (120 mA), en courant continu pour la recharge des deux batteries Ni-Cd
  2. transformer le 2,4 V issu des batteries en 9 V pour alimenter la machine
circuit redresseur intégré dans le compartiment batterie de la TI-57

Attention, dans le connecteur qui relie le pack de batteries à la carte mère, les couleurs des fils ont été inversées : le fil rouge est relié à la borne négative, et le fil noir à la borne positive. Qu'est-ce qui a bien pu passer par la tête des ingénieur Texas Instruments ? Est-ce une erreur ? Heureusement, si on alimente la calculatrice en 9 V à l'envers pendant une courte période, il ne se passe pas grand chose, mais cela ne la détruit pas.

L'autonomie de la TI-57 est limitée, principalement à cause de son affichage à LED rouges. Mais que valent ses performances par rapport aux machines de sa génération ? Pour les mesurer, j'ai repris mon programme de test de primalité, dans une version proche de la première que j'avais écrite pour la TI-66. Sans chercher l'optimisation, la syntaxe condensée de la TI-57 permet de faire rentrer le même algorithme dans 42 pas (au lieu de 62) :


Avec 2701 en entrée, mon programme retourne 37. Il s'agit du plus petit diviseur de 2701, qui n'est donc pas premier. Avec 524287 en entrée, il affiche 1 après un peu plus de 8 minutes de calcul. C'est un temps correct, sans plus ; la HP-25 que j'avais testée précédemment faisait mieux.

Une machine aussi rudimentaire que la TI-57, armée de 8 mémoires et de 50 pas de programme seulement, est-elle capable de résoudre un problème plus complexe ? Par exemple, la recherche des zéros de la fonction ci-dessous est-elle à sa portée ?


f(x) = 1 - (x+4)^2*cos(sqrt(x))*e^((-x)/5) 

Celle-ci est formulée ci-dessus au format de la barre de recherche Google. Voici son graphe :

f(x) = 1 - (x+4)^2*cos(sqrt(x))*e^((-x)/5)

Eh bien oui, la TI-57 relève ce défi avec brio ! Je suis arrivé à faire rentrer au chausse pied dans la calculette une adaptation de mon programme de recherche de zéros par la méthode de la sécante. L'algorithme est identique à celui que j'avais implémenté dans mes articles précédents pour la PB-1000 et la FX-602P.  L'équivalence avec les variables du programme en Basic sera la suivante :

Basic --- TI-57
    X --- 00
    A --- 01
    Z --- 02
    I --- 07

Voici donc ce code, en 26 pas :


La fonction f(x) dont on recherche les zéros est codée à partir du pas 27 :


Ouf, ça rentre juste, au pas près ! Mode d'emploi de ce programme :
  1. modifier si besoin f(x) à partir du pas 28. Les mémoires 3 à 6 ne sont pas utilisées dans le reste du programme.
  2. stocker le X initial dans la mémoire 0. Par exemple avec [2] [STO] [0]
  3. stocker la précision dans la mémoire 7. Par exemple [1] [EE] [8] [+/-] [STO] [7]
  4. n'oubliez pas de passer en mode radian, si f(x) contient de la trigonométrie
  5. vous pouvez éventuellement calculer quelques valeurs de f(x) pour avoir une idée de la forme de la courbe : stocker X dans la mémoire 0, puis lancer [SBR] [1].
  6. [RST] puis [R/S] pour lancer la recherche d'un zéro
  7. le résultat s'affiche à l'écran
Pour terminer, voici une petite démonstration en vidéo, dans laquelle je recherche trois zéros de l'équation f(x) décrite ci-dessus :


Les trois solutions de f(x) = 0 trouvées par la TI-57 sont donc :
  • 2,3442043
  • 23,626136
  • 37,051386

dimanche 3 février 2019

Un solveur pour la FX-602P

Dans mon article précédent, je vous avais proposé de développer un solveur numérique pour la Casio FX-602P. Ce programme lui permet en effet de combler une de ses lacunes par rapport à la HP-15C qui possède la fonction [solve] d'origine. Il n'y a probablement pas de grand secret mais, malgré les explications données en annexe D du manuel de la 15C, je ne sais pas exactement quel est l'algorithme implémenté dans la HP. Alors j'ai choisi la méthode numérique de la sécante. Elle est proche de la méthode de Newton, mais plus facile à programmer, car on n'aura pas à calculer de dérivée. On obtiendra néanmoins une bonne approximation d'un zéro de f(x) en quelques itérations seulement.

Recherche d'un zéro de f(x) = x^3 - 2x -5

J'ai repris le vieux programme en Basic pour PB-1000 qui m'avait rendu de bons et loyaux services dans les années 90. Pour la toute première version, je m'étais inspiré d'un algorithme nommé "Newton" donné dans un vieux bouquin d'analyse numérique dont j'ai oublié le titre, et que j'avais emprunté à la bibliothèque de la Fac des Sciences Montpellier II. Andreas Wichmann avait publié mon programme pour PB-1000 sur son site quelques années plus tard, avec mon accord. Le voici de retour en 2019 dans une version écrémée :

10 ANGLE1:GOTO40
20 Y=X^3-2*X-5
30 RETURN
40 PRINT"X initial="X;:INPUTX:I=1E-8
50 A=X:GOSUB20:Z=Y:X=X+I:GOSUB20
60 X=A-Z*I/(Y-Z):PRINTA;X:IFABS(X-A)>I THEN50
70 PRINT"F(X)="Z;"X="X

Usage :
  1. éditer le programme pour entrer la fonction sous la forme Y=F(X) à la ligne 20
  2. si besoin, modifier la précision qui est codée en dur à la fin de la ligne 40 (variable I)
  3. lancer le programme
  4. répondre à la question "X initial= ... ?" par exemple avec la valeur 1.
  5. le programme pour PB-1000 affiche les valeurs de A et X à chaque itération
  6. affichage du résultat à la fin (contrôle avec F(X) qui doit être proche de zéro). Attention, dans certains cas particuliers, il se pourrait qu'il n'y ait pas convergence. Dans ce cas, on utilisera la touche [BRK] pour interrompre le programme. 
Pour illustrer le déroulement de ce programme, j'ai créé l'image ci-dessous avec un montage Gimp de trois copies d'écran PB-1000 :

Convergence de l'algorithme de la sécante sur PB-1000 (montage)

Pour le portage sur la FX-602P qui nous intéresse plus particulièrement dans cet article, j'utiliserai les quatre mémoires listées ci-dessous avec les variables équivalentes dans le listing en Basic :

Basic --- FX-602P
    X --- 00
    A --- 01
    Z --- 02
    I --- F

Ce qui nous donne le programme en 38 pas ci-dessous. Il est moyennement lisible, je vous l'accorde ! Vous pouvez le saisir par exemple en P1, toujours en une seule ligne de programme sur la 602P :

Min00 1 EXP 8 +/- MinF 
LBL0 MR00 Min01 GSBP0 Min02 MR00 + MRF = 
GSBP0 - MR02 = 1/x * MRF * MR02 = +/- + MR01 = PAUSE 
Min00 - MR01 = ABS x>=F GOTO0 MR00

Ce programme fait appel au sous-programme P0 ci-dessous, qui doit contenir la fonction f(x) ; ici [ x^3 - 2x - 5 ] en 10 pas :

Min00 x^y 3 - 2 * MR00 - 5 =

Usage :
  1. entrer la fonction f(x) dans P0
  2. si besoin, modifier la précision, codée en dur au pas 4 (variable F)
  3. taper le X initial, par exemple 1
  4. lancer le programme P1
  5. pause et affichage de la valeur de X à chaque itération ; le résultat à la fin
Sur la HP-15C, pour comparer les performances de son solveur intégré, j'ai utilisé le programme suivant :

001-42,21,11   LBL A
002-      36   ENTER
003-      36   ENTER
004-       3   3
005-      14   y^x
006-      34   x<>y
007-       2   2
008-      20   *
009-      30   -
010-       5   5
011-      30   -
012-   43 32   RTN

Je vous rétrocède ci-dessous les vitesses d’exécution que j'ai mesurées sur les trois machines avec le calcul donné en exemple. Sur les versions Casio, l'affichage intermédiaire permet de suivre la convergence, mais prend évidemment du temps :

- Casio PB-1000 : environ 5 secondes pour afficher le résultat (calcul à partir de X=1)
- Casio FX-602P avec [pause] à chaque itération : 16 secondes (calcul à partir de X=1)
- HP-15C avec la fonction [solve] intégrée : temps très variables, qui dépassent parfois la minute, en fonction de l'intervalle de recherche initial (registres X et Y).

Pour conclure, j'ai réalisé une petite vidéo, à visionner de préférence en 1080p, qui permet de revivre les sensations vintage procurées par la FX-602P et la HP-15C en les faisant tourner en parallèle :  


La calcul est super long sur la HP-15C parce que l'intervalle de recherche est arbitrairement fixé à [1, 51] dans la vidéo. Pour plus d'équité dans la comparaison, j'aurais pu fixer une valeur de Y plus basse. Par exemple, en fixant l'intervalle initial à [2, 3] le temps de calcul peut être réduit à 38 secondes environ. Parmi les autres optimisations possibles, on peut désactiver le mode de calcul complexe (merci C.Ret) via la séquence de touche peu intuitive [g] [CF] [8]. Il est également intéressant de retirer les deux [ENTER] superflus en début de programme. L'inconvénient de cette méthode, c'est qui ne faudra pas oublier le double [ENTER] manuel préalable si on utilise le programme pour un calcul direct (par exemple : f(1) = -6). Enfin, on peut factoriser la formule via la méthode de Horner ; comme cela a été suggéré dans le premier commentaire à cet article (ci-dessous). Voici un nouveau programme qui prend en compte ces remarques :

001-42,21,11   LBL A
002-      20   *
003-       2   2
004-      30   -
005-      20   *
006-       5   5
007-      30   -
008-   43 32   RTN

Dernier truc : un [ENTER] de trop, quand on saisit l'intervalle de recherche initial, a également une influence sur la performance ! Par conséquent, il vaut mieux taper [2] [ENTER] [3] sans deuxième [ENTER], et directement [f] [SOLVE] [f] [A]. Grâce à ces optimisations, le temps de calcul pour afficher le résultat 2,094551481 est ramené à 12 secondes pour la HP-15C. La différence avec les calculs précédents est substantielle. Cependant, elle ne suffit pas à faire la différence face à une FX-602P bien plus réactive.

dimanche 27 janvier 2019

La Casio FX-602P : petite mais ultra-efficace

La Casio FX-602P est une calculatrice parmi les plus anciennes de ma collection. En réalité, je ne l'ai pas connue pendant mes années lycée. J'ignorais même son existence jusqu'à récemment, où j'ai souhaité l'acquérir. Je trouve en effet plaisant de manipuler la maman de la FX-4000P qui reste l'une de mes machines préférées. La FX-602P est sortie au Japon en septembre 1982, à la même époque que la HP-15C, donc deux ans avant la HP-71B que je testais dans mon article précédent. La 15C, d'un gabarit comparable à la 602P, est certainement sa concurrente de la même période la plus sérieuse. Le positionnement tarifaire de la Casio, autour de 900 Francs en 1982, puis à 600 Francs en 1984 (source : Micro Systèmes numéro 45), la situait dans une fourchette de prix basse. Et même si la HP-15C était possédée, voire encensée, par une de mes connaissances, j'aurais eu beaucoup de mal à choisir entre ces deux machines à l'époque. Pour bien situer le niveau technique de la FX-602P, on la compare parfois à la HP-41C qui était beaucoup plus chère. Au sommet de cette gamme de prix, le Sharp PC-1500 était vraiment plus encombrant que les trois machines citées précédemment ; sans pour autant se démarquer fondamentalement pour un usage type calculette, en math ou en physique. Quant aux Texas Instruments de l'époque, elles étaient vraiment dépassées. La TI-66 par exemple pouvait faire valoir l'argument de sa simplicité d'accès et de son large clavier très lisible, mais elle était larguée sur tout le reste.

Une Casio FX-602P dans son jus ; quelques touches sont un peu effacées.

Parmi les nombreux avantages de la Casio, on apprécie immédiatement :
  • son clavier compact, sa robustesse (même 35 ans plus tard), sa légèreté, sa finesse
  • le connecteur d'extension qui permet de la raccorder sur une interface Casio FA-1 ou FA-2, pour les sauvegardes sur cassettes, ou sur l'imprimante FP-10 à "film métallique", vendue 450 Francs à l'époque (à ne pas confondre avec le traceur FA-10 du PB-700).
  • sa logique de calcul dite "algébrique" avec 11 niveaux de parenthèses ;  même si cette logique ne s'applique qu'aux opérations arithmétiques, et non aux fonctions trigonométriques par exemple.
  • son ensemble de fonctions mathématiques complet, son langage machine "Turing-complet"
  • son afficheur LCD lisible et évolué pour l'époque, à 10 caractères alphanumériques, plus deux chiffres d'exposant, et 11 petits indicateurs de mode (en haut).
Cet afficheur simplifie grandement la programmation, notamment pendant les phases le débogage. Autre cas d'usage de l'afficheur alphanumérique : il est ici facile d'écrire un programme de conversion décimal vers hexadécimal. Cet exemple est donné dans le manuel qui, en 68 pages seulement, est à l'image de la simplicité globale de la machine. D'autre part, même si la précision interne de la FX-602P inclut deux chiffres de plus que la 15C, elle reste limitée au calcul de 69! (grands nombres). Cependant, à la fin de ce dernier calcul, la Casio exhibe directement trois chiffres significatifs de plus que la HP. Si les fonctions classiques sont bien présentes sur la 602P, on regrette l'absence des nombres complexes, des matrices, de la résolution d'équations et de l'intégration numérique. Ces programmes intégrés avancés resteront pendant longtemps l'exclusivité des HP. Cependant, force est de constater que la relative lenteur de la 15C entraîne de sacrés limitations sur le calcul numérique. Je dévoile déjà ma conclusion, mais nous verrons ci-dessous que la Casio se démarque nettement sur la vitesse de calcul.

Mon programme habituel de test de primalité a été rapide à porter sur la FX-602P. Bien que très différent en apparence de la version HP-15C, je l'ai écrit d'une façon aussi compacte, en 39 pas. Et je vous le livre donc ci-dessous dans un tableau Gnumeric commenté. Cette représentation ne me plaît pas beaucoup car elle n'est pas fidèle à la sérigraphie des touches. J'essaierai de faire mieux, un jour...

"Ce nombre est-il premier ?" pour Casio FX-602P

Vu l'intérêt limité du truc, je ne crois pas que l'un de mes rares lecteurs souhaitera recopier ce programme. Néanmoins, j'écris ici vite fait un mode d'emploi résumé :


  1. passer en [MODE][2] (WRT), puis [P0] par exemple, pour saisir le programme ci-dessus
  2. revenir en [MODE][1] (RUN)
  3. saisir le nombre 'n' à tester, puis lancer le programme par [P0]. Pendant le calcul, vous observerez un mini segment horizontal à l'extrême droite du LCD.
  4. affichage du premier diviseur de n, ou bien 1, si n est premier


Le test sur le nombre 524287 s’exécute sur la FX-602P en un peu moins d'une minute. Cette jolie Casio au corps bardé d'aluminium est donc, à la louche, huit fois plus rapide que la HP-15C. Ce bon score me donne envie de re-programmer une version de l'algorithme de Newton pour la 602P, pour compenser l'absence de solveur numérique. Je vous propose donc une suite au prochain numéro !