Domanda

I inizialmente cercavo un byte modo convertito a stare a galla, e ho trovato le risposte che indicano era il più veloce è quello di creare una tabella di ricerca.

Così mi chiedevo se qualcuno sa di un pre-esistente tabella di ricerca che posso usare.

È stato utile?

Soluzione

Normalmente si dovrebbe inizializzare la tabella di ricerca utilizzando poche righe di codice e un ciclo for o qualsiasi altra cosa si adatta al vostro scopo. E 'utile solo se si sta facendo un gran numero di conversioni su un numero finito di possibili ingressi.

L'esempio che segue è solo per dimostrare la tecnica di base della costruzione e utilizzando una tabella di ricerca. A meno che non v'è più la matematica coinvolti, ci sarebbe in realtà una performance colpito se implementato questa (vedi sotto).

float[] lookupTable = new float[256];
for (int i = 0; i < 256; i++)
{
    lookupTable[i] = (float)i;
}

float convertedValue = lookupTable[byteValue];

Il codice è C #, non ho esperienza con Objective C. In C ++ la dichiarazione di matrice sarebbe un po 'diverso, ma si ottiene l'idea.

Quando utilizzare una tabella di ricerca?

Nell'esempio precedente, non v'è alcun miglioramento delle prestazioni, perché nessun calcolo è coinvolto, solo una conversione da byte a galleggiare. Si consideri il caso in cui è coinvolta la divisione in virgola mobile (come il tuo caso):

    lookupTable[i] = i / 255f;

In questo caso, la tabella di ricerca dovrebbe essere più veloce rispetto all'utilizzo di calcolo diretto. Più complessa è la matematica (trigonometria, ecc), il più grande è il guadagno di prestazioni. Un altro utilizzo comune è gamma modificare un'immagine (funzione esponenziale).

Altri suggerimenti

Tabella di ricerca? Non abbiamo bisogno di nessun stinkin' tabelle di ricerca!

float floatVal = (float)byteVal;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top