Tecnica di ottimizzazione: strength reduction

di il
6 risposte

Tecnica di ottimizzazione: strength reduction

Riscrivere il seguente frammento di programma C applicando manualmente strength
reduction:
int f(x) {
 return x*5;
}
Soluzione:
int f(x) {
 return x + (x << 2); // equivale a: x + x*4 = x*5
}
Il procedimento è chiaro:

con x = 4
int f(4) {
 return 4*5; //quindi 20
}
4 è 100 in banario, dunque:
int f(4) {
 return 4 + (4 << 2); // 4 << 2 -> 100 << 2 -> 10000 = 16. Dunque, 4 + 16 = 20.
}
La mia domanda è: come faccio capire di quanto shiftare, se non conoscessi il parametro in ingresso della funzione? Grazie.

6 Risposte

Devi accedere o registrarti per scrivere nel forum
6 risposte