Oggi durante la programmazione mi sono imbattuto nella seguente domanda: ci sono compilatori che ottimizzano in base a presupposti matematici?
Ad esempio in casi come
unsigned int i,b;
(i,b not constant)
if(sqrt(i) == b)
...
In questo caso sarebbe molto più efficace da usare
unsigned int i,b;
(i,b not constant)
if(i == b*b)
...
Supponendo una funzione sqrt (), che gestisce gli interi e i round senza segno in modo sensato.
Dato che non sono stato in grado di trovare informazioni utili (probabilmente perché non sapevo cosa cercare in modo specifico), qualcuno può dirmi o indicarmi una fonte pertinente?
Ci sono compilatori (per linguaggi imperativi) che ottimizzano queste cose usando una sorta di euristica? O più nello specifico - che ne è di gcc e microsoft visual c ++ e matlab?