float-Multiplikation vermeiden

12/12/2007 - 14:47 von Robert W. Kuhn | Report spam
Hallo,

ich habe hier folgenden Code:

short *pShort=...; // short hat 2byte
float *pFloat=...; // int hat 4byte
int *pInt =...; // float hat 4byte

for(i=0; i<LOOP_CNT; i++)
pShort[i]=(short)(pInt[i]*pFloat[i]);

Das Problem ist, das ich an einem Prozesser ohne Gleitkommeunterstützung
sitze. Damit dauert erstens die Multiplikation lange und zweitens kann
der Kompiler die Funktion nicht aufrollen, weil er für die
Multiplikation einen Funktionscall machen muss.

Desweiteren sind die int's sehr groß (~10^6) und die float's sehr klein
(~10^-5). Mir fàllt so richtig nichts mehr ein, wie ich obigen Code noch
optimieren kann bzw. die floatingpoint-Multiplikation ganz wegbekomme.
Jemand eine Idee?

Tschau - Robert
 

Lesen sie die antworten

#1 Sven Woehlbier
12/12/2007 - 16:09 | Warnen spam
Robert W. Kuhn schrieb:
Hallo,

ich habe hier folgenden Code:

short *pShort=...; // short hat 2byte
float *pFloat=...; // int hat 4byte
int *pInt =...; // float hat 4byte

for(i=0; i<LOOP_CNT; i++)
pShort[i]=(short)(pInt[i]*pFloat[i]);

Das Problem ist, das ich an einem Prozesser ohne Gleitkommeunterstützung
sitze. Damit dauert erstens die Multiplikation lange und zweitens kann
der Kompiler die Funktion nicht aufrollen, weil er für die
Multiplikation einen Funktionscall machen muss.

Desweiteren sind die int's sehr groß (~10^6) und die float's sehr klein
(~10^-5). Mir fàllt so richtig nichts mehr ein, wie ich obigen Code noch
optimieren kann bzw. die floatingpoint-Multiplikation ganz wegbekomme.
Jemand eine Idee?

Tschau - Robert



Die Lösung für die Elimination der Floatkommaoperationen heißt arbeiten
mit Festkommazahlen.

Must du z.B. 3Nachkommastellen berücksichtigen sollten vorangegangene
Berechungen die Festkommazahlen mit 1000 multiplizieren. Das
Zwischenergebnis wird multipliziert und im Anschluß durch 1000 dividiert.

Also:
1) Transformation Kommazahl in Festkommazahl (Datentyp: integer) durch
Multiplikation mit einem Faktor
2) Berechnungen mit Festkommazahlen ausführen
3) Rücktransformtion in Kommazahl durch Division mit dem unter 1)
verwendeten Faktor (falls notwendig).

Transformation und Rücktransformation sollten so in den vorhanden
Berechnungen integriert werden, daß möglichst keine zusàtzlichen
Operationen zustandekommen. Z.B. hat man oft sowieso irgendwelche
Konstanten in den Formeln, dann berücksichtige den notwendigen Faktor in
diesen Konstanten.

Tschau Sven!

Ähnliche fragen