Pregunta

Al principio me estaba buscando un byte de manera convertir a flotar, y encontré respuestas que indican fue el más rápido es crear una tabla de consulta.

Así que me preguntaba si alguien sabe de una tabla de consulta preexistente que pueda utilizar.

¿Fue útil?

Solución

Normalmente se inicializar la tabla de búsqueda usando unas pocas líneas de código y un bucle o sea apropiado para su propósito. Es sólo es útil si está haciendo un gran número de conversiones en un número finito de posibles entradas.

El siguiente ejemplo es sólo para demostrar la técnica básica de la construcción y el uso de una tabla de búsqueda. A menos que haya más matemáticas involucradas, no sería en realidad un impacto en el rendimiento si se implementó este (ver más abajo).

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

float convertedValue = lookupTable[byteValue];

El código es C #, que no tienen experiencia con C. En C ++ objetivo de la declaración de matriz sería un poco diferente, pero se entiende la idea.

¿Cuándo utilizar una tabla de búsqueda?

En el ejemplo anterior, no hay ganancia de rendimiento, porque ningún cálculo está involucrado, sólo una conversión de bytes a flotar. Considere el caso en que está implicada la división de punto flotante (como su caso):

    lookupTable[i] = i / 255f;

En este caso, la tabla de consulta debe ser más rápido que utilizando el cálculo directo. Cuanto más compleja es la de matemáticas (trigonometría, etc.), mayor será la ganancia de rendimiento. Otro uso común es gamma corregir una imagen (función exponencial).

Otros consejos

tabla de búsqueda? No necesitamos ningún apestoso tablas de búsqueda!

float floatVal = (float)byteVal;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top