Tecnica di ottimizzazione: strength reduction

di
Anonimizzato14377
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

  • Re: Tecnica di ottimizzazione: strength reduction

    Ogni shift a sinistra equivale a una moltiplicazione per due, ogni shift a destra ad una divisione, indipendentemente dal valore di x.
    O forse ho capito io male la domanda?
  • Re: Tecnica di ottimizzazione: strength reduction

    Non ti serve il parametro di ingresso.
  • Re: Tecnica di ottimizzazione: strength reduction

    oregon ha scritto:


    Non ti serve il parametro di ingresso.
    Sì, ho sbagliato. Scusate. Intendevo la moltiplicazione per 5.

    tuixte ha scritto:


    Ogni shift a sinistra equivale a una moltiplicazione per due, ogni shift a destra ad una divisione, indipendentemente dal valore di x.
    O forse ho capito io male la domanda?
    Ah ok, perfetto. Ora ho capito, grazie!
  • Re: Tecnica di ottimizzazione: strength reduction


    Ah ok, perfetto. Ora ho capito, grazie!
    Non sei nuovo del C, almeno delle basi ... pensavo sapessi cosa voleva dire >> e <<
  • Re: Tecnica di ottimizzazione: strength reduction

    Hai ragione, che ti devo dire
  • Re: Tecnica di ottimizzazione: strength reduction

    davide.fruci ha scritto:


    Hai ragione, che ti devo dire
    Non prendere a male il commento di oregon, si presuppone che se utilizzi un certo operatore, ti sia documentato su cosa fa e come funziona.
    In ogni caso, l'importante è aver risolto il problema.
    Alla prossima
Devi accedere o registrarti per scrivere nel forum
6 risposte