Developpez.com

Le Club des Développeurs et IT Pro

Le code de la « sinclair scientific » étudié à l'aide du reverse engineering

Révèle les secrets qui lui ont permis de faire du calcul scientifique

Le 2013-09-03 14:46:27, par Cedric Chevalier, Expert éminent sénior

En 1974, Clive Sinclair est un jeune homme ambitieux qui voulait commercialiser une calculatrice scientifique bon marché dans un segment déjà dominé par les grands noms comme HP.

Le hic c’est que, réaliser la calculatrice de Sinclair au prix auquel il souhaitait la commercialiser, s’avère une tâche impossible. D’ailleurs, son partenariat avec Bowmar (un constructeur de l’époque) a débouché dans un cul-de-sac.

Sinclair s’est retourné vers Texas Instruments qui lui a fourni une puce qu’on jugerait à première vue rudimentaire face à celles du produit de HP. Elle supportait un nombre d’opérations réduit (addition, multiplication soustraction et division), ne comportait que trois registres, et avait une ROM dont la capacité était la moitié du HP-35 qui dominait le marché.

A titre de comparaison, le HP-35 a requis 2 ans de travail d’une vingtaine d’ingénieurs hautement qualifiés et le NEC plus ultra de la technologie de l’époque. Face à un challenger aussi puissant que le HP-35, le produit de Sinclair fait office d’outsider. Les ingénieurs de Texas Instruments, pour dissuader Sinclair de sa folie, diront « C’est tout simplement impossible », pour souligner le fait que leur puce était incapable de faire du calcul scientifique.

Impossible ? Pas tout à fait, puisque Sinclair revint trouver les ingénieurs de Texas avec une calculatrice capable d’effectuer le calcul des fonctions sinus, cosinus, tangente, logarithme, Arctan, ArcSin, ArcCos ainsi que le calcul avec exposants.

On ne peut qu’imaginer la consternation des ingénieurs. Ce qu’avait omis de dire Sinclair, c’est qu’il était assisté par un génie de la programmation, le PHD Nigel Searle, qui a réalisé un travail d’orfèvre malgré les limitations techniques de la calculatrice.

Grâce à la technique du « reverse engineering », Ken Shirriff a pu fournir les détails sur le code que la calculatrice exécutait. On peut se rendre compte que Nigel a eu recours à de petites astuces simples mais efficaces pour doter le périphérique des fonctions du calcul scientifique. Il a utilisé le Reverse Polish Notation (qui permet d’écrire l’opérateur après les opérandes d’un calcul exemple 3+2 devient 3 2 +) pour représenter un nombre signé, le 0 est le signe positif alors que 5 représente le signe négatif, la division est implémentée comme une série de soustractions et bien d’autres.

Pour le rapport qualité prix, la calculatrice de Sinclair vaut son pesant d'or. En effet, elle coûtait 100 dollars l’unité contre 365 dollars pour la HP-35. Toutefois, elle pêchait côté performances. Par exemple l’opération sinus(1) prenait 7,5 secondes.

Source : blog Ken Shirriff

Et vous ?

Qu'en pensez vous ?
  Discussion forum
22 commentaires
  • e-ric
    Membre expert
    Tout à fait d'accord avec sevyc64, ça optimise surtout le commerce...
    Pour le fun :Loi de Wirth

    Les outils bureautiques, à ce titre, m'amusent beaucoup, avoir besoin d'un Core i7 pour écrire un simple texte mis en forme prête à rire. On faisait la même chose avec un 386 à une époque, avec peut-être moins de confort.
    Personnellement, je cherche le plus souvent à optimiser mon code ou tout du moins à ne pas avoir un code trop débile.
    Ce n'est pas parce qu'on dispose dans une seule machine de la puissance d'un centre de calcul d'il y a 20 ans qu'il faut coder comme un pied.

    Il faut aussi ne pas oublier que les compilos prennent en charge l'optimisation qu'il est souvent difficile de dépasser voire contreproductif. L'optimisation doit porter sur l'algorithme non pas sur la réalisation de celui-ci. Celà n'apporte peu d'optimiser par le code seulement un algo foireux. D'un autre côté, un bon algorithme sera valorisé par une implémentation soigneuse.

    Cdlt

    @+
  • sevyc64
    Modérateur
    Et oui, c'est qu'à l'époque on savait réfléchir et faire les choses.
    On avait pas de puissance de calcul, on avait pas de mémoire, mais on arrivait à tirer la quintessence du matériel dont on disposait.
    Je me rappelle le temps ou on optimisait un code à l’instruction asm près.

    Aujourd'hui, on trouve un logiciel un peu lent ? on monte en gamme sur le CPU, on rajoute un GPU surpuissant (sachant que l'on a évidement aucun logiciel capable de l'exploiter pleinement), et puis au passage on rajoute aussi quelques Go de ram (quid des portables à 16Go de Ram, juste pour aller sur internet et regarder quelques films HD ?)

    Et coté développement, ben comme on a de la puissance et de la mémoire, on se pose pas la question si on code bien ou avec les pieds. On ne sait plus ce qu'est l'optimisation,on la considère même comme une perte de temps.

    La norme aujourd'hui est le i5 ou i7 avec de 12 à 16Go de ram. JE suis absolument certain que la plupart des logiciels correctement développés et fortement optimisés comme l'a pu l'être le code de la sinclair tourneraient sur des P4 avec 2Go de ram que l'on possédait il y a plus de 10 ans.
  • sevyc64
    Modérateur
    Envoyé par e-ric
    Les outils bureautiques, à ce titre, m'amusent beaucoup, avoir besoin d'un Core i7 pour écrire un simple texte mis en forme prête à rire. On faisait la même chose avec un 386 à une époque, avec peut-être moins de confort.
    Oui, enfin, quand on voit la gestion des styles et titre, modèles de document, (entre-autre) sous Word 2007 et suivant par rapport à ce qu'elle était sous Word 97, c'est à dire hyper simple et facile. Je pense que niveau confort, on y a plus perdu que gagné. Mais bon, ce n'est que mon avis.
  • the_babou
    Membre du Club
    Je pense que bien peu de (aucun?) programmeurs seraient capable d'une telle prouesse aujourd'hui. Moi le premier !
  • Jipété
    Expert éminent sénior
    Envoyé par sevyc64
    Oui, enfin, quand on voit la gestion des styles et titre, modèles de document, (entre-autre) sous Word 2007 et suivant par rapport à ce qu'elle était sous Word 97, c'est à dire hyper simple et facile. Je pense que niveau confort, on y a plus perdu que gagné. Mais bon, ce n'est que mon avis.
    C'est aussi le mien, mais tu t'es fait moinser 3 fois, sans doute par les fans du ruban,

    et le taf, alors, ça a donné qqchse ?
  • Paul TOTH
    Expert éminent sénior
    Envoyé par ymoreau
    Absolument pas d'accord. Chacun son métier, et pour du développement logiciel on n'a généralement pas besoin de connaitre ce genre d'opérations binaires, le compilateur optimise déjà toute cette couche mieux que la majorité des développeurs même expérimentés.
    Bien entendu avoir une vision globale de ce qui se passe en bas niveau aide à mieux appréhender les impacts de la programmation haut niveau. Mais au bout d'un moment il est normal de se concentrer sur le niveau sur lequel on intervient. Pour moi ce qui manque le plus c'est un véritable apprentissage des bonnes pratiques, et un meilleur encadrement des architectures/refactoring, des relectures d'algos/code en équipe etc. J'ai l'impression que les projets se laissent dominer par le code existant alors qu'il faudrait sans cesse le remettre en question ET s'en inspirer à la fois.
    à ce rythme là on pourrait aussi abandonner les cours de math à l'école puisqu'on a tous une calculette sous la souris.

    dans un autre domaine, je donne des cours de programmation PHP, et bien ma première session de formation ne parle absolument pas de programmation, je parle d'adresse IP, de TCP/IP, réseaux, HTTP, proxy etc...Alors je ne forme pas des techniciens réseaux, ce n'est pas le but, mais je donne sur une journée un aperçu ce qu'il y a sous le capot pour que les développeurs Web arrêtent de rebooter leur machine quand ils reçoivent une erreur 404. je leur demande juste d'avoir une connaissance sommaire de ce qu'il se passe sur un réseau IP avant d'aborder les questions de programmation web. Ils doivent être en mesure d'identifier si le problème qu'ils rencontrent vient de leur connexion réseau, d'un problème d'URL, d'une configuration serveur ou d'un bug dans leur application. Ils doivent pouvoir du premier coup d'oeil distinguer une popup du navigateur d'un "alert" Javascript ou d'une iframe en avant plan.

    Si après ça ils veulent développer avec un L4G sans la moindre trace de HTML ou Javascript, ça les regarde, mais au moins ils sauront pourquoi ils ont choisi ce mode de développement.
  • Darkzinus
    Expert éminent sénior
    Article sympathique ! J'en pense qu'il était sacrément talentueux !
  • tlt
    Membre averti
    il en connait des choses en matière d"optimisation. chapeau
  • kiprok
    Membre averti
    Belle perfermance en effet. C'est toujours payant d'avoir un bon developpeur à ses cotés!
  • el_slapper
    Expert éminent sénior
    L'optimisation est un art que peu maitrisent(et moi pas franchement). C'est pour ça que d'aucuns conseillent d'upgrader le matos, et de n'optimiser que si ça ne suffit pas.

    Perso, j'essaye toujours de faire une programmation naturellement efficace, MAIS le premier objectif, c'est quand même que ça marche et que ça soit lisible.