Ben en fait ta définition ça rentre justement dans les trucs fondamentalement buggés
Dans ce cas tu associes à chaque expression l'ensemble des résultats *possibles* (donc tout, si c'est un behavior qui est pas trop defined), et tu dis que deux expressions sont équivalentes si ces ensembles sont égaux.
Il n'y a pas de bug fondamental à définir l'équivalence de deux expressions.
Cela dit tu as raison sur le fond, ma remarque ne s'appliquait pas à *toutes* les relations d'équivalence : on pourrait effectivement définir une relation d'équivalence réflexive telle que (float)(N+N-N) n'est pas équivalent à (float)N+(float)N-(float)N, par exemple en s'assurant que si l'une fait une undefined behaviour alors l'autre aussi, et que sinon la valeur obtenue est la même (en fait c'est simplement la plus grande relation d'équivalence contenue dans le pré-ordre "peut être remplacé par" que j'avais défini en ./124).
Bon ok.
Mais à propos d'une question vraiment anodine on atteint quand même le stade de la 2^n-capillotomie.
il y a bien plongement
Il n'y a pas plongement algébrique, les lois n'ayant pas les mêmes ensembles de définition.
Une application injective uniquement ensembliste, c'est tout miteux.
Et puis en fait il n'y avait même pas besoin de floats pour parler de ça : il suffirait de parler de plongement des entiers d'une taille donnée dans des entiers de taille plus grande ou de taille arbitraire, sans que la discussion en soit changée ^^
Ah non, si t'as bien suivi ça n'a rien à voir.
Moralement les types entiers plus ou moins grands sont tous des troncatures à un ordre plus ou moins grand des entiers 2-adiques. C'est un univers homogène, qui n'a rien à voir avec l'univers des floats.