dimanche 22 mars 2020

Précision suisse avec la DM42

La DM42 de SwissMicros est une réplique moderne de la fameuse HP-42S de 1987. Il faut savoir que cette dernière est considérée par ses aficionados comme la meilleure calculette du monde. Le composant logiciel central dans la DM42 de 2017 posée sur ma table est l'excellent Free42 de Thomas Okken.

SwissMicros DM42

Diffusé sous licence GPLv2, Free42 était déjà mon calculateur préféré sur smartphone ; notamment parce que son clavier virtuel est à la fois complet et bien espacé. En comparaison avec d'autres émulateurs, la lisibilité et l'ergonomie générale, forcément rétros, sont bonnes. Et la programmabilité est bien entendu indispensable sur une calculatrice scientifique. Mais revenons à cette SwissMicros : c'est indéniablement une belle machine à la finition impeccable. Cependant, comme j'ai l'habitude de chipoter, je vais passer en revue rapidement ses quelques défauts.

Avant de pouvoir appuyer sur [ON], ma première déception concerne son étui en simili cuir noir. Il est en effet trop serré et bien difficile à retirer. J'aurais préféré une pochette à soufflet avec un rabat magnétique, dans le style de celle de ma HP-50g par exemple. Si on poursuit le parallèle avec Free42 sur smartphone, il y n'a pas de rétro-éclairage sur la DM42, ni sous l'écran, ni sous le clavier. Son LCD Sharp, bien plus vaste que l'original, est néanmoins super bien contrasté. Un rétro-éclairage avec batterie aurait sans doute complexifié et alourdi la machine. Celle-ci pèse déjà 200g avec sa pochette. Il faut savoir que le dos en métal noir mat, qui donne sa rigidité à la calculette, pèse à lui tout seul 80g sur ma balance. D'autre part, on constate qu'il n’y a pas de batterie rechargeable dans la DM42 actuelle. Elle est alimentée par une simple pile CR2032. Donc, ne faites pas comme moi au début : il est inutile de la laisser branchée sur USB en espérant qu'elle se recharge ! Cela dit, si la pile est en fin de vie, on peut alimenter la calculette via ce port. De façon anecdotique, la fréquence du CPU monte alors à 80 MHz, au lieu de 24 MHz sur la pile interne.

Ma dernière petite critique concerne le clavier de la DM42 : il est certe fiable, meilleur que celui de ma WP-34S (sur base de HP-30b) ; mais je le trouve un peu ferme par rapport aux vraies HP. En contrepartie, il offre une rangée de touches supplémentaires qui n'existait pas sur la HP-42S. Un mode de clavier alphabétique, similaire à celui de la HP-41CV, a également été ajouté. En mode [ALPHA], un indicateur s'affiche en haut, avec la signification suivante :
  • [ ] : mode alphabétique "menu" type HP-42, grâce aux touches situées sous l'écran. Les chiffres et symboles du clavier restent accessibles en direct.
  • [a] : mode alphabétique HP-41 en minuscules 
  • [A] : mode alphabétique HP-41 en majuscules
Pour passer d'un mode à l'autre, par exemple des minuscules vers les majuscules, on utilise la séquence de touche [jaune] [flêche vers le bas] ; ou bien [jaune] [flêche vers haut] pour revenir en minuscules. C'est un peu à l'envers et contre intuitif, mais on s'y fait. Globalement, il faut bien reconnaître que la saisie est hyper laborieuse comparativement à un pocket Basic.

Un gros point fort de la DM42 c'est la précision des calculs, ainsi que sa capacité à manipuler de grands nombres. Par exemple, si on souhaite vérifier l'addition manuelle ci-dessous qui comporte des nombres entiers de 12 chiffres, c'est possible avec la DM42. Mais il n'y a là rien d'exceptionnel pour une calculatrice récente. Je précise que ce n'est pas mon écriture (ni en bleu, ni en gris) :

une addition à vérifier
Par défaut, le résultat est tronqué de deux chiffres significatifs, mais il est possible de les afficher tous temporairement avec [SHOW]. Pour un affichage permanent, la solution que j'ai trouvée utilise le programme FWIW disponible sur le site de Thomas Okken. Dernière astuce, grâce à la séquence de touche [jaune] (maintenue) puis [DISP], il est possible de créer des copies d'écran dans un format BMP en 400x240 pixels en deux couleurs :

un résultat affiché avec 13 chiffres significatifs

Pour capturer un [SHOW] "normal" il vous faudra être rapide. Les copies d'écran sont sauvegardées dans le répertoire /SCREENS qui est accessible en USB "mass storage device", avec le driver standard. La gestion des fichiers, pour les upgrades notamment, est  très bien faite sur la DM42. Ici, aucun logiciel privateur n'est obligatoire pour copier des fichiers, comme c'est malheureusement le cas sur de nombreuses machines récentes.

J'ai utilisé des copies d'écran pour réaliser le montage ci-dessous. Il s'agit du code source de mon test habituel de primalité, tel qu'il est affiché sur la DM42 et légèrement adapté à partir de ma version pour HP-15C :

test de primalité sur DM42
Pour vous éviter de le retaper si vous voulez l'essayer (peu probable ?) je vous met à disposition le programme ici premier.raw (directement copiable sur la DM42). Avec ce code, la DM42 répond 37 (le premier diviseur) lorsqu'on lui donne 2701 en entrée, et 1 (nombre premier) avec 524287, presque instantanément dans les deux cas. Cette SwissMicros est donc bien une calculatrice haut de gamme de puissance "suffisante". Les sensations rétros qu'elle procure sont agréables, même pour quelqu'un qui n'est pas tombé dans le RPN quand il était petit.

dimanche 15 mars 2020

La HP-12c et le mystère de la façade dorée

Quand on évoque la HP-12C, on ne peut s'empêcher de rappeler l'exceptionnelle longévité de cette calculatrice financière sortie en 1981. Elle est en effet toujours diffusée, sans interruption depuis 39 ans au moment où j'écris ces lignes. Seuls quelques détails permettent de distinguer ses différentes évolutions matérielles. La version vendue actuellement est nommée HP-12C Platinum. Sa façade est devenue grise métallisée, et non plus dorée comme les anciennes. Cependant, ses fonctions n'ont presque pas évolué depuis quatre décennies. Par quel miracle cet objet électronique a-t-il survécu si longtemps, bien au delà de la durée initialement estimée par ses concepteurs ? Quelle est donc la vraie raison du succès planétaire de la HP-12C ? Même la durée de vie des trois piles bouton LR44 de la version originale est exceptionnelle : 12 ans ; et même parfois plus ! On sourit en apprenant que les concepteurs HP auraient souhaité doter la machine originale d'un indicateur du niveau des piles. Enfin, la robustesse de cette série HP Voyager est indéniable. Le positionnement du clavier en mode paysage aurait été choisi pour cette raison : pour une protection optimale de l'écran LCD entre les bordures plastique ; si l'on en croit Dennis Harms (le chef de projet de la première HP-12C).

HP-12C de 1982

Je n'ai jamais eu l'occasion d'utiliser intensivement une calculatrice financière, ni dans mon cursus, ni dans ma profession. Pour le moment, cette HP-12C est le seul modèle non scientifique de ma collection. En réalité, pour couper les cheveux en quatre, ma HP-30B était bien une calculette financière au départ. Mais sa modification en WP-34S scientifique est quasi définitive car l'overlay est collé sur les touches. Sinon, si je devais choisir une de mes machines pour effectuer un calcul financier en 2020, peut-être que je prendrais ma volumineuse et récente Casio fx-CP400 ? D'abord parce que la liste des fonctions financières pré-programmées dans cette Casio est plutôt longue. Ensuite, parce que son mode d'emploi est relativement intuitif. On pourrait même affirmer que ses fonctions sont auto-documentées. Mais mon choix serait de toute évidence stupide pour les calculs utilisant des fonctions directement accessibles sur la HP-12C. Je vais prendre un exemple pour illustrer mon propos : si un livre coûte 85 € HT, quel est son prix TTC ? Sur la Casio, comme sur de nombreuses machines modernes, c'est laborieux. Tout d'abord, le démarrage n'est pas instantané comme sur la HP-12C. Ensuite, on doit naviguer dans un cliquodrome, éventuellement aidé du stylet, pour configurer correctement l'affichage :

Appui sur [Settings] (à gauche)
puis [Format de base] 
Format nombre [Fixe 2] et cocher [Calcul décimal] 
[Valid]

Ensuite le calcul proprement dit :

85+(85x5.5%)[EXE]

Le problème sur la Casio, c'est qu'il n'y a pas de touche [%] physique, on doit donc aller la chercher de la façon suivante :

[Keyboard]
[abc]
[Symb.]
[%]

Pour d'autres calculs éventuels à suivre, le clavier virtuel pourra rester affiché ; en occupant la moitié inférieure de l'écran. Nous allons voir que ces petits tracas n'existent pas sur HP-12C. Tout d'abord, le format d'affichage est à deux décimales par défaut après une ré-initialisation complète. Sinon, pour passer au format monétaire, c'est deux touches :

[f] 2

Ensuite, pour effectuer le calcul décrit ci-dessus, c'est 8 touches (moitié moins que sur la Casio) :

85 [ENTER] 5.5 [%] [+]

Le résultat correctement arrondi pour le prix du livre est donc 89,68€ TTC.

Un dernier petit avantage de la HP, c'est qu'elle a affiché le montant de la TVA en résultat intermédiaire (4,68€). L'affichage explicite de cette valeur nécessiterait de manipuler encore le clavier et l'écran tactile de la fx-CP400... ou bien, de changer de méthode ? L'usage du tableur intégré à la Casio serait sans doute une alternative viable. Mais sans contestation possible, sur cette épreuve, c'est une victoire pour la HP-12C.

En tant que collectionneur, je m'intéresse parfois à la provenance et à l'histoire des machines que je manipule. La HP-12C que je tiens entre mes mains a été vendue dans la région Lyonnaise, dans un magasin nommé "DOM" (fermé depuis longtemps). Elle porte le numéro de série 2201A02826, que l'on peut décoder grâce aux informations fournies par le HP Museum. Les numéros de série des HP anciennes sont en effet au format YYWWC##### dans lequel :
  • 'YY' est le nombre d'années qui se sont écoulées depuis 1960
  • 'WW' correspond approximativement à la semaine de fabrication
  • 'C' est la première lettre du pays en anglais : A pour "America" (USA), B pour "Brazil", G pour "Germany", J pour "Japan", S pour "Singapore" et M pour "Malaysia" ou "Indonesia".
  • '#####' est enfin un numéro unique dans l'année et la semaine de fabrication du pays concerné
Ma HP-12C est donc la 2826e machine à être sortie d'une usine américaine la semaine 01 en janvier 1982. Toutes les calculettes HP actuelles sont bien entendu produites en Chine. En ces temps de Covid-19, on pointe du doigt, à juste titre, le résultat de certaines politiques industrielles. Pour la production des objets électroniques en Europe, notre dépendance vis à vis de la Chine est sans doute devenue bien trop élevée. Quant aux très beaux clones de calculatrices HP produits par la société SwissMicro (DM12L par exemple) avec leurs composants STMicroelectronics, il n'est pas évident de comprendre le rôle précis de chaque site (design, fabrication, assemblage).

Clairement, les performances sont secondaires une machine comme la HP-12C. Je dirais même plus :  certains financiers, obnubilés par la justesse du résultat, seraient même rassurés par un temps d'attente substantiel sur les calculs complexes. Cela dit, par rapport à mes autres machines, de quoi est réellement capable ce CPU de la série "HP Nut" . Celui-ci est cadencé à la modeste fréquence de 220 kHz et associé à une puce nommée avec humour "R2D2" (RAM/ROM/Display Driver). Pour évaluer sa relative lenteur, je vais faire tourner mon programme habituel de test de primalité naïf, dans une version strictement identique à celle de la HP-25 :

Test de primalité pour HP-12C

Le calcul sur le nombre 524287 prend environ 5 minutes sur la HP-12C qui est donc étonnamment plus rapide que la HP-15C au CPU identique. Il est vrai que ma version pour la HP-12C est légèrement différente ; car les labels numérotés ne sont pas disponibles.

Pour conclure, voici ci-dessous un autre programme, un peu plus complexe, que j'ai converti pour la HP-12C. Il permet de compter le nombre de façons différentes d'obtenir 1€ (ou 100 centimes) en utilisant les pièces existantes (1 centime, 2 centimes, 5 centimes, 10 centimes, 20 centimes, 50 centimes et 1 €). On suppose qu'on dispose d'autant de pièces de chaque sorte que nécessaire. Mon algorithme en Basic pour Casio PB-1000 est le suivant :

10 INPUT N:T=1
20 FOR A=0 TO N STEP 50
30 FOR B=A TO N STEP 20
40 FOR C=B TO N STEP 10
50 FOR D=C TO N STEP 5
60 T=T+INT((N+2-D)/2)
70 NEXT D:NEXT C:NEXT B:NEXT A
80 PRINT T

On peut lancer ce programme sur la Casio après avoir tapé si nécessaire la commande CLEAR 5000,900,7000 (par exemple) pour obtenir une partition mémoire suffisante. Le même programme porté sur la HP-12C, en programmation par séquence de touches et en RPN, est évidemment un peu moins lisible :


Malgré son côté un peu rebutant, la saisie de ce listing est relativement rapide sur la HP-12C. Attention toutefois aux erreurs, car son "éditeur" est ultra rudimentaire : l'insertion entre deux pas de programme n'est pas possible comme sur la TI-57. Attention également à la saisie des GTO après un test (par exemple au pas 27) : il faut s'y reprendre à deux fois avec un BST. Mais, au final, avec 100 (centimes) en entrée, puis [R/S], le résultat est bien le même que sur la Casio : 4563 combinaisons possibles... après presque 6 minutes de calcul. Cela prend moins de 20s sur la PB-1000 de 1986.

dimanche 26 janvier 2020

Trappe et batterie neuves pour TI-57

Dans mon article précédent, qui date de l'année dernière (déjà !), j'avais décrit les quelques difficultés auxquelles on peut être confronté lorsque l'on souhaite rallumer en 2020 une TI-57 de 40 ans d'âge. Malgré la vieillesse de l'objet, une utilisation presque confortable reste possible, sans avoir de fil raccordé en permanence à une alimentation de labo. Pour atteindre cet objectif, on mettra de côté le chargeur original spécifique (courant alternatif en sortie), les anciennes batteries Ni-Cd hors d'usage, ainsi que le circuit redresseur intégré dans la trappe originale, parfois fatigué. On remplacera avantageusement tous ces composants par un accumulateur moderne, au format 6F22, tension 9 volts, en technologie Li-Po (très résistante aux fuites d'électrolytes) et rechargeable par un port micro USB. J'ai trouvé le mien sur banggood.com.

Accumulateur pour remplacer ceux de la TI-57

Pour les collectionneurs exigeants, l'adaptation dans la TI-57 sera sans trace et totalement réversible : ça rentre sans trou, sans couper et sans modification du connecteur original. À l'usage, l'impact sur le réalisme historique et sur les sensations un peu "cheap" procurées par cette calculette rétro est négligeable. En réalité, je n'ai rien inventé : l'astuce qui consistait à remplacer la batterie d'origine par une pile 9 volts, était connue et documentée depuis les années 80.

Adaptation trappe imprimée en 3D et pile 9V sur TI-57

Avant la soudure des broches 2,54 mm sur les fils rouge et noir (à inverser par rapport aux couleur des fils de la calculette), je vous recommande de sortir complètement deux broches de la partie en plastique noir de la réglette (coupée à trois unités). Sinon, à cause de l'élargissement du plastique par la chaleur du fer à souder, elles ne tiendront plus très bien par la suite. Pour compléter ce montage, j'ai trouvé un modèle prêt à imprimer en 3D d'une trappe compatible avec les TI de la série Majestic sur thingiverse.com. Mais comme je n'ai pas d'imprimante 3D, je l'ai commandé à un graveur professionnel grâce à une redirection sur treatstock.com. J'ai choisi "SEB Création 3D" à Phalsbourg en Moselle. La livraison a été rapide, avec deux pièces livrées pour le prix d'une : une trappe en PETG, et la même en ABS telle que je l'avais commandée. Malheureusement, la pièce en PETG s'est cassée dès la première utilisation. Le modèle 3D de la languette est donc trop fin ; exactement comme me l'avait fait remarquer "SEB Création 3D" avant de lancer la gravure. En ABS c'est un peu plus rigide, donc c'est ok. Cette adaptation, presque invisible de l'extérieur, permettra de profiter de la TI-57 pendant encore de longues années. Le seul inconvénient au final, c'est qu'il faut sortir la batterie 9V de son logement pour la recharger. Pour faciliter encore l'usage, le repositionnement de celle-ci dans le boitier de la TI-57 et le rangement des fils, avant de fermer la trappe, pourraient sans doute être améliorés.

Dos de la trappe pour TI-57 imprimée en ABS 

Pour aller plus loin avec cette calculatrice, je vous recommande de télécharger en PDF le bouquin suivant paru en 1982, environ 4 ans après la TI-57 : Mathématiques appliquées et calculatrices programmables notation algébrique directe TI 57, 58, 59 (ou bien ici) par Liviu Solomon et Marcel Hocquemiller. On y retrouve tous les programmes indispensables en calcul numérique : calcul matriciel, recherche de zéros, intégration, équations différentielles, etc. Les nombreuses astuces utilisées, pour faire rentrer ces programmes dans la mémoire très restreinte des TI, sont tout bonnement excellentes. Même si la mise en page est rudimentaire (probablement tapé à la machine à écrire mécanique), la qualité pédagogique de l'ouvrage n'en est pas moins épatante.


En conclusion, après avoir résolu le problème de l'énergie, on réalise que cette calculette scientifique programmable pas chère de la fin des années 70 est toujours capable de rendre bien des services. Dans le cadre d'un usage pédagogique, elle n'a pas grand chose à envier aux plus luxueuses calculatrices modernes.

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 !

samedi 13 octobre 2018

Le haut du panier en 1984, la HP-71B

La vie est-elle plus chère aujourd'hui qu'il y a trente ans ? Si on prend l'exemple du très classieux ordinateur de poche HP-71B que j'ai sous les yeux, on serait tenté de répondre négativement. En effet, en 1984, ce petit objet fut mis en vitrine à un prix très aérien de 5690 Francs français ! De plus, à l’instar de certaines marques de voiture allemandes, la liste des options proposées par HP était longue comme le bras. Alors, même si ma tentative de comparaison de prix prenait correctement en compte l'inflation, elle trouverait rapidement ses limites. On peut néanmoins s’autoriser à penser que le HP-71B était plus cher, pour l'époque, que les smartphones 2018 les plus onéreux. Bien entendu, si on se cantonne au monde scolaire, le top de la calculette autorisée aux examens reste actuellement bien plus abordable que la somme qu'on aurait dû débourser au début des années 80.

Sans disposer des chiffres de ventes officiels, j’ai l’impression que le HP-71B était moins répandu en France que ses concurrents japonais de la même génération ; à savoir le Sharp PC-1500 et le Casio PB-700. La première fois que j’ai entendu parler de la 71B, c’est lorsque je me suis intéressé à nouveau aux machines rétro il y a quelques années, et notamment à la HP-28S de 1988. En effet, ces deux HP partagent un certain nombre de points communs, et notamment leur architecture CPU Saturn 4 bits. C'est grâce à la documentation publique abondante de la 71B que les développements communautaires les plus intéressants de la 28S, bien plus fermée, ont été rendus possibles. Néanmoins, malgré les sept ouvertures présentes sur son boitier, en plus de la trappe à pile, de la prise pour un chargeur externe et de la fente pour le lecteur de cartes magnétiques, l'adjectif "ouvert" s'applique difficilement à la 71B. En effet, bien que sa documentation soit abondante, il reste selon moi un produit propriétaire fermé, qui ne supporte que les standards HP. Par exemple, l'échange de données avec un ordinateur, à travers l'interface HP-IL, reste onéreux et compliqué, même en 2018. Malgré ces réticences, j’ai fini par craquer, et par enchérir sur une HP-71B en bon état sur eBay.

La première chose que j'ai eu envie de calculer, c'est la factorielle de 70. En effet, la plupart des calculettes équivalentes sont limitées à 69!. Ici, le résultat approché de FACT(70) s'affiche sans erreur de dépassement de capacité : 1.197857167E100. Le HP-71B est effectivement la première calculette à proposer une implémentation de la norme IEEE 754 (1985). On a par exemple la commande INF pour symboliser l'infini, ou encore MAXREAL qui correspond à 9.99999999999E499 sur HP-71B.

Sur le HP-71B, quatre trappes en face avant sont prévues pour insérer des extensions mémoires.

Les touches "Rotate and Clic" sont typiques des HP de l'époque, mais leur disposition est ici originale. L'usage tenu à deux mains, loin d'une table, est possible ; contrairement à la configuration à charnière de ma PB-1000 favorite qui est conçue pour être utilisée posée à plat exclusivement. La tenue de cette HP-71B rigide, en manipulant le clavier à deux pouces, est possible occasionnellement. A l'allumage, on se retrouve en mode d'édition "remplacement", ce qui est classique pour cette génération de pocket. Par contre, la touche [INS] pour le mode insertion est ici nommée [I/R]. Dans le même style, l'habituelle touche [DEL] est ici remplacée par [-CHAR]. D'autre part, la touche [SPC] n'est pas plus large que les autres.

Dans la documentation il est mentionné trois modes d'opération :
  1. mode éxécution Basic. Dans ce mode, il est possible de faire des calculs directs, sans taper "PRINT". C'est le mode par défaut.
  2. mode édition programme Basic. En fait, c'est presque le même que le (1). Mais la machine détecte automatiquement que la ligne de programme en cours de saisie commence par un numéro.
  3. mode calcul. On doit l'appeller par la combinaison des deux touches [f][CALC]. Ce n'est pas un mode RPN, mais il affiche néanmoins le résultat des calculs intermédiaires. L'équivalent de la touche [ANS] des Casio est ici nommée [RES].

Le HP-71B est facile à utiliser comme une calculette en notation algébrique directe.
Avec le langage Basic relativement standard du HP-71B, le portage de mon programme habituel de test de primalité est ultra rapide. Le symbole "@" est nécessaire pour séparer plusieurs instructions sur la même ligne. C'est un peu inhabituel par rapport au ":" que l'on trouve dans d'autres Basic.

10 INPUT "N?";N
20 J=INT(SQR(N)) @ I=2
30 IF FP(N/2)=0 THEN 80
40 FOR I=3 TO J STEP 2
50 IF FP(N/I)=0 THEN 80
60 NEXT I
70 BEEP @ PRINT "1 "; @ GOTO 10
80 PRINT I; @ GOTO 10

Le test sur le nombre 524 287 s'exécute ici en 10 secondes environ. Ce score est un peu meilleur que celui de ses contemporains de 1984, à savoir le Casio PB-700 et le Sharp PC-1500A. Mais, bien entendu, ce n'est pas seulement avec le seul argument de la vitesse que l'on peut justifier un tel écart de prix.

Mon deuxième programme de test, qui teste si un nombre est de Keith, et qui, dans le cas contraire affiche le nombre de Keith suivant, est lui aussi très simple à convertir. Si vous avez oublié ce qu'est un nombre  de Keith, j'avais détaillé un algorithme dans mon article précédent sur la WP-34S.

10 DIM N(10)
20 INPUT"N?";N1
30 L=INT(LOG10(N1))+1 @ M=N1 @ S=0
40 FOR I=L TO 1 STEP -1
50 N(I)=MOD(M,10) @ S=S+N(I) @ M=INT(M/10) @ NEXT I
60 I=I+1 @ IF I>L THEN I=1
70 M=2*S-N(I) @ N(I)=S @ S=M @ IF S<N1 THEN 60 
80 IF S=N1 THEN BEEP @ PRINT S;"est un Keith" @ END
90 N1=N1+1 @ GOTO30

En Basic basique donc, le Saturn cadencé à 640 kHz seulement s'en sort bien sur ce calcul entier un peu compliqué, avec un score en moins de 5 min 30 s pour trouver le Keith 7385 en commençant le calcul à partir de N=7000.

En conclusion, cette machine polyvalente et riche en fonctions reste toujours passionnante même 34 ans plus tard. En dehors de l'étroitesse de son afficheur LCD, elle n'a qu'un défaut majeur, c'est son prix !