Ci sono compilatori che ottimizzano l'uso delle funzioni matematiche?

0

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?

    
posta NeinDochOah 22.01.2016 - 22:11
fonte

1 risposta

4

I compilatori utilizzano regolarmente riduzione della forza .

Un esempio comune di riduzione dei multipli da aggiungere (dato che gli aumenti sono in genere più veloci dei multipli).

i*2 trasformato in i+i è più veloce su molte macchine (e talvolta viene trasformato in i<<1 ).

Moltiplicati implicitamente si verificano comunemente nei loop for su array (la cui dimensione dell'elemento è > 1 byte) e a volte possono essere ridotti ad aggiungere, con ottimizzazione induction variable , che è simile in quanto è coinvolta la relazione matematica tra moltiplicare e aggiungere.

    
risposta data 22.01.2016 - 22:42
fonte

Leggi altre domande sui tag