Bonjour,
Merci pour ton analyse (très claire, je te rassure !). Je te rejoins quasiment en tout point. Sauf sur le point clé suivant:
Les processeurs X86 pratiquent l'arithmétique modulaire c'est à dire respectent la structure d'anneau de \mathbb{Z}/2^n\mathbb{Z} pour les lois + et \times où n est la taille des entiers machines manipulés.
Or, le décalage à droite n'est pas une opération arithmétique sur les éléments de \mathbb{Z}/2^n\mathbb{Z} mais sur les représentants entiers de ces classes compris entre 0 et 2^n - 1.
Cette opération agit en donnant le quotient entier (et non modulaire) par 2^a. En particulier 'a' n'a aucune raison d'être modulaire. Au contraire, c'est un comportement qui pose des problèmes (d'ailleurs le comportement est choisi comme "indéfini" dans la plupart des langages classiques).
Pour résumer grossièrement, aller coller de la modularité sur l'argument du shr n'a aucun fondement arithmétique que ce soit dans \mathbb{Z} ou dans \mathbb{Z}/2^n\mathbb{Z}.
Ou bien, dit autrement, quelle propriété arithmétique précise, un tel fonctionnement permet-il ?
Selon moi ce comportement n'a aucune raison théorique (éventuellement un historique technique tout au plus). Il est d'ailleurs intéressant de voir que Ada a décidé de corriger ce problème sur le haut niveau. Python et Haskell également.
Quand je disais que j'adorais Ada c'était dans le cadre précis de l'école où j'enseigne où l'on a besoin d'enseigner dans les langages compilés (pour des besoins d'ingénierie). Après si je sors ma casquette perso de prof de math, je dois avouer que je ne manipule quasiment aucun langage excepté du python via Sage.
[^] # Re: Du haut niveau pour gérer correctement du bas niveau
Posté par snowball (site web personnel) . En réponse au journal Un décalage de 64 bits, ça vous inspire comment ?. Évalué à 2.
Bonjour,
Merci pour ton analyse (très claire, je te rassure !). Je te rejoins quasiment en tout point. Sauf sur le point clé suivant:
Les processeurs X86 pratiquent l'arithmétique modulaire c'est à dire respectent la structure d'anneau de \mathbb{Z}/2^n\mathbb{Z} pour les lois + et \times où n est la taille des entiers machines manipulés.
Or, le décalage à droite n'est pas une opération arithmétique sur les éléments de \mathbb{Z}/2^n\mathbb{Z} mais sur les représentants entiers de ces classes compris entre 0 et 2^n - 1.
Cette opération agit en donnant le quotient entier (et non modulaire) par 2^a. En particulier 'a' n'a aucune raison d'être modulaire. Au contraire, c'est un comportement qui pose des problèmes (d'ailleurs le comportement est choisi comme "indéfini" dans la plupart des langages classiques).
Pour résumer grossièrement, aller coller de la modularité sur l'argument du shr n'a aucun fondement arithmétique que ce soit dans \mathbb{Z} ou dans \mathbb{Z}/2^n\mathbb{Z}.
Ou bien, dit autrement, quelle propriété arithmétique précise, un tel fonctionnement permet-il ?
Selon moi ce comportement n'a aucune raison théorique (éventuellement un historique technique tout au plus). Il est d'ailleurs intéressant de voir que Ada a décidé de corriger ce problème sur le haut niveau. Python et Haskell également.
Quand je disais que j'adorais Ada c'était dans le cadre précis de l'école où j'enseigne où l'on a besoin d'enseigner dans les langages compilés (pour des besoins d'ingénierie). Après si je sors ma casquette perso de prof de math, je dois avouer que je ne manipule quasiment aucun langage excepté du python via Sage.