Question

Je cherchais d'abord un octet de convertir façon de flotter, et trouvé des réponses qui indiquent le plus rapide WAS est de créer une table de recherche.

Alors je me demandais si quelqu'un sait d'une table de consultation pré-existante que je peux utiliser.

Était-ce utile?

La solution

Normalement, vous initialiser la table de consultation en utilisant quelques lignes de code et une boucle ou pour tout ce qui convient à votre but. Il est utile que si vous faites un grand nombre de conversions sur un nombre fini d'entrées possibles.

L'exemple ci-dessous est de démontrer que la technique de base de la construction et à l'aide d'une table de consultation. À moins qu'il y a plus de mathématiques impliqué, il y aurait effectivement une baisse de performance si vous mis en place ce (voir ci-dessous).

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

float convertedValue = lookupTable[byteValue];

Le code est C #, je n'ai aucune expérience avec l'objectif C. En C ++ la déclaration de tableau serait un peu différent, mais vous voyez l'idée.

Quand utiliser une table de consultation?

Dans l'exemple ci-dessus, il n'y a pas de gain de performance, car aucun calcul, puisqu'est une conversion d'octets à flotter. Prenons le cas où la division à virgule flottante est impliqué (comme votre cas):

    lookupTable[i] = i / 255f;

Dans ce cas, la table de consultation devrait être plus rapide que d'utiliser le calcul direct. Le calcul plus complexe (trigonométrie, etc.), plus le gain de performance. Un autre usage courant est de correction de gamma d'une image (fonction exponentielle).

Autres conseils

table de recherche? Nous ne avons pas besoin puants tables de consultation!

float floatVal = (float)byteVal;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top