Kevin Kofler (./99) :
Si.
Comme N+N-N est "undefined", le compilateur a le droit de faire n'importe quoi, donner N, ou même N + erreur d'arrondi (si l'overflow fait déborder la mantisse), est tout à fait valide.
Le premier terme est undefined.
Le second non.
ben je pourrais dire
float_of_int(N+N-N) = float_of_int(N)+float_of_int(N)-float_of_int(N)et avoir tout aussi raison que toi, hein ^^ une programme qui fait toujours une undefined behaviour c'est pas très différent d'une logique contradictoire...
Je sais pas où tu veux en venir avec ta rhétorique à deux sous... C'est pourtant pas compliqué, relis calmement ce que j'écris.
Ah ben oui ça n'a rien d'un anneau, mathématiquement c'est horriblement bordélique les floats ^^
Sous la douche j'ai eu une illumination qui, je l'espère, éclairera mieux ton esprit embrouillé.
Les informaticiens ont partiellement tort lorsqu'ils croient que les types entiers sont faits pour représenter des entiers. En réalité ils représentent des approximations d'
entiers 2-adiques, c'est à dire des éléments de l'anneau Z_2. Les différents types entiers, qui ont de plus en plus de bits, représentent les différents étages du produit projectif des Z/2^nZ, qui au total vaut Z_2.
D'ailleurs le p-adique c'est tout simple c'est tout beau.
Par contre, les floats, évidemment, sont une représentation ad hoc (et forcément bordélique, on peut pas faire autrement), des nombres réels.
Il s'ensuit que floats et ints sont dans deux mondes algébriques radicalement différents, correspondant à deux valuations non isomorphes sur Z : la valuation usuelle et la valuation 2-adique.