Risultati intermedi come variabili o solo valori base?

0

Ho un oggetto che ha poche variabili di base (numeri interi come esempio) e una variabile intermedia per ulteriori elaborazioni. La variabile intermedia può essere calcolata dalla base vars. Ora la domanda: dovrei sempre ripetere il calcolo della variabile intermedia dalla base vars o dovrei salvare il valore e cambiarlo solo se cambiano le variabili di base? (Ho bisogno di accedere a ogni var in ordine pseudo-casuale.)

Due esempi in C ++ - Codice.

Memorizzazione nella cache del risultato:

class Test
{
  private:
    int a;
    int b;
    int c;

    int x;

    void calcX ()
    {
        // Just an example for a calculation for x.
        x = ((a + 10) * (b / (c*c + 1)));
    }

  public:
    void setA (int var)
    {
        a = var;
        calcX();
    }
    void setB (int var)
    {
        b = var;
        calcX();
    }
    void setC (int var)
    {
        c = var;
        calcX();
    }

    // Every var has a get methode.
}

Ricalcola sempre il risultato:

class Test
{
  private:
    int a;
    int b;
    int c;

    int x;

  public:
    // Var a, b and c have get and set methodes.

    int getX ()
    {
        return ((a + 10) * (b / (c*c + 1)));
    }
}

Quindi, quale modo è considerato migliore? Davvero non lo so. Non dovremmo salvare il valore intermedio perché sarebbe ridondante, ma di nuovo non dovremmo ricalcolare il valore ancora e ancora.

    
posta Nova 01.12.2014 - 08:24
fonte

1 risposta

4

Dipende.

Se devi calcolare una volta e utilizzare milioni di volte, la risposta è ovvia: il primo caso vince.

Se devi calcolare ogni volta, o abbastanza spesso, scegli quello che preferisci. La tua funzione non legge da un file e non ha operazioni lente, quindi non farà una grande differenza.

Evita l'ottimizzazione prematura.

Durante l'ottimizzazione, è meglio misurare. Profila il codice e ottimizza solo i colli di bottiglia. Tutto il resto è una microottimizzazione e dovrebbe essere evitato.

    
risposta data 01.12.2014 - 09:25
fonte

Leggi altre domande sui tag