Frage

Ich war auf der Suche zunächst für eine Art und Weise zu konvertieren Byte zu schweben, und fand Antworten, die die schnellste war anzuzeigen, eine Lookup-Tabelle zu erstellen.

Also habe ich mich gefragt, ob jemand eine vorbestehenden Lookup-Tabelle weiß, dass ich verwenden können.

War es hilfreich?

Lösung

Normalerweise würden Sie die Lookup-Tabelle mit ein paar Zeilen Code und einer for-Schleife initialisieren oder was auch immer Ihr Zweck passt. Es ist nur dann sinnvoll, wenn Sie eine große Anzahl von Konvertierungen auf einer endlichen Anzahl von möglichen Eingaben zu tun.

Das folgende Beispiel ist nur die grundlegende Technik des Aufbaus und unter Verwendung einer Lookup-Tabelle zu demonstrieren. Es sei denn, es mehr Mathematik beteiligt ist, wäre es tatsächlich eine Leistung sein treffen, wenn Sie implementiert dies (siehe unten).

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

float convertedValue = lookupTable[byteValue];

Der Code C # ist, habe ich keine Erfahrung mit Ziel C. In C ++ die Array-Deklaration ein bisschen anders wäre, aber Sie bekommen die Idee.

Wenn eine Lookup-Tabelle benutzen?

Im obigen Beispiel gibt es keinen Leistungsgewinn, da keine Berechnung beteiligt ist, nur eine Umwandlung von Byte zu schweben. Betrachten wir den Fall, wo Gleitkomma-Division beteiligt ist (wie der Fall sein):

    lookupTable[i] = i / 255f;

In diesem Fall sollte die Lookup-Tabelle schneller sein als die direkte Berechnung verwendet wird. Je komplexer die Mathematik (Trigonometrie, etc.), desto größer ist der Leistungsgewinn. Eine weitere häufige Verwendung ist gamma ein Bild (Exponentialfunktion) korrigiert wird.

Andere Tipps

Lookup-Tabelle? Wir brauchen keine keine stinkin Lookup-Tabellen!

float floatVal = (float)byteVal;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top