Archives de catégorie : Ada

Le C, un langage de bas niveau ?

Voilà une question étrange. Selon Alan Perlis , « un langage de programmation est bas niveau lorsqu’il nécessite de faire attention aux choses qui ne sont pas pertinentes »

Il y a de nombreuses façons d’interpréter le « pas pertinentes ». Prenons un exemple un peu technique mais révélateur. Les réels en machine sont stockés sous la forme d’approximations flottantes. Sur 64 bits, un flottant est constitué d’un bit de signe s, puis de 11 bits pour stocker son exposant e en base 2 et enfin de 52 bits pour sa mantisse m. L’interprétation se fait grâce à la formule

    \[(-1)^s * 2^{e - 1023} \left(1 + \frac{m}{2^{52}}\right)\]

Si on souhaite, à partir d’un flottant récupérer les trois champs s, e et m, comment s’y prendre ? Chaque langage proposant des fonctionnalités bien particulières je propose dans la vidéo qui suit un comparatif en langage C et en langage Ada qui permet de mieux saisir la phrase d’Alan Perlis et d’aborder des aspects souvent ignorés des néophytes de ces langages.

Voyons comment on fait en C :

Et en Ada:

Un reste, loin dans la suite de Fibonacci

Épisode 1 : ça parle de quoi cet article ?

Le plus simple est que je vous le raconte en vidéo 😉

Petite remarque: dans cette vidéo je donne un ordre de grandeur du nombre de chiffres de F_N. Mais en fait en notant r=\frac{\ln\phi}{\ln10}, en majorant \ln(1+x) par x (pour x>0), on obtient assez facilement

    \[nr-\frac{\ln5}{2\ln10}-2^{-n}<x<nr-\frac{\ln5}{2\ln10}+2^{-n}\]


Pour n=N=10^{18} on obtient au dixième près

    \[x\sim208987640249978733,8\]


ce qui montre que F_{N} possède exactement 208987640249978734 chiffres.

Épisode 2 : si on essayait …

…malgré tout de coder le calcul des termes dans un langage compilé ? (ou encore: si je trouvais un prétexte pour jouer avec le langage Ada ?)

Première partie :

Deuxième partie :

Troisième épisode : les maths à la rescousse !

Un peu d’algèbre linéaire et la fameuse « exponentiation rapide ». Un algorithme qui décoiffe 🙂

Quatrième épisode : encore des maths !

Mais là, on part dans le monde de l’arithmétique modulaire pour appliquer l’algorithme d’exponentiation rapide

Épilogue

On implémente tout ce qu’on a vu en Ada pour donner une réponse instantanée à notre problème

Erratum: il s’agit de monsieur Daniel Feneuille (et non David) dont je voulais parler. Au passage, ses cours sont disponibles ici : https://ada.developpez.com/cours/iut/

Je vous parlais aussi d’un papier que j’ai rédigé sur les suites récurrentes linéaires d’ordre 2 (pour un public averti) :