30

Un exemple concret: les optimisateurs peuvent optimiser:
int a=...,b=...;
int x=a*a, y=b*b;
if (x+y<0) ...

en:
int a=...,b=...;
int x=a*a, y=b*b;

tout court, et c'est leur plein droit. Je ne pense pas que c'est fait actuellement sous cette forme (il n'y a pas encore de "value range tracking"), mais c'est prévu, et puis ce n'est qu'un exemple.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

31

Hmm... tel que c'est présenté ça peut paraître logique mais à mon humble avis ça breakera pas mal de programmes dans des situations plus ambiguës. Je trouve ça plutôt gore que l'optimiseur ait le droit de supposer qu'il n'y a pas overflow (même si sur d'autres machines c'est indispensable car l'overflow peut déclencher une exception).

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

32

Mais c'est ce que dit le standard C. Il faut utiliser des non-signés pour les calculs en modulo.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

33

Oui. Mais personnellement je n'étais pas au courant et beaucoup de gens ne sont pas au courant non plus, je pense, donc à mon avis beaucoup de progs utilisent les calculs en modulo avec des entiers signés (les miens y compris).

D'autant que cette convention n'existe que parce que certaines machines ne stockent pas les nombres signés en complément à deux, mais ce n'est pas le cas sur 68000 (ce qui n'empêche pas que c'est le standard, oui je sais).

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)