dove posso trovare un byte di galleggiare tabella di ricerca?
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.
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;