Pergunta

Inicialmente, eu estava procurando um byte forma convertido ao float, e encontrou respostas que indicam o mais rápido foi é criar uma tabela de pesquisa.

Então, eu queria saber se alguém sabe de uma tabela de pesquisa pré-existente que eu posso usar.

Foi útil?

Solução

Normalmente, que se inicializar a tabela de pesquisa usando algumas linhas de código e um loop for ou o que ternos seu propósito. É apenas útil se você está fazendo um grande número de conversões em um número finito de entradas possíveis.

O exemplo a seguir é apenas para demonstrar que a técnica básica de construção e utilização de uma tabela de pesquisa. A menos que haja mais matemática envolvida, não seria realmente um impacto no desempenho se você implementou esta (veja abaixo).

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

float convertedValue = lookupTable[byteValue];

O código é C #, eu não tenho nenhuma experiência com objetivo C. Em C ++ a declaração de matriz seria um pouco diferente, mas você começa a idéia.

Quando usar uma tabela de pesquisa?

No exemplo acima, não há nenhum ganho de desempenho, porque nenhum cálculo está envolvido, apenas uma conversão de byte para flutuar. Considere o caso onde a divisão de ponto flutuante está envolvido (como o seu caso):

    lookupTable[i] = i / 255f;

Neste caso, a tabela de consulta deve ser mais rápido do que usar cálculo direto. Quanto mais complexa a matemática (trigonometria, etc.), maior será o ganho de desempenho. Outra utilização comum é a gama correção de uma imagem (função exponencial).

Outras dicas

tabela

Lookup? Nós não precisamos de tabelas de pesquisa stinkin!

float floatVal = (float)byteVal;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top