>Ok muss ich wohl zur Tabelle greifen. Aber nur um sicher zu gehen: gibt
>es wirklich keine "normale" Möglichkeit einen Integer in einen Float zu
>schreiben?
Entweder durch das Casten:
1 | float f;
|
2 | int i;
|
3 | i=IrgendwasWildes();
|
4 | f=(float)i;
|
Dann ist in f statt z.B. 243 die 243,00 gespeichert.
Oder du bastelst die dein Float selbst, indem du das Vorzeichen, den
Exponent, sowie die Mantisse zurechtfrickelst.
( http://de.wikipedia.org/wiki/Gleitkommazahl )
Zurück zum Logarithmieren:
1) Nimm ne Tabelle in der die Funktionswerte in äquidistanten Abständen
gespeichert sind und interpoliere dazwischen linear.
2) Mit Kenntnis über den Logarithmus (bzw den betrachteten Bereich),
kannst du die Tabelle anpassen und dort wo sich die Werte stärker ändern
mehrere Einträge machen.
1 | int Tabelleneintraege[]={1,3,9,16,25,36,100};
|
2 | int zugehörigeWerte[] ={1,2,3, 4, 5, 6, 10};
|
3 |
|
4 | int getWert(int input){
|
5 | int ret;
|
6 | int i=0;
|
7 | while(Tabelleneintrag[i]<input)i++;
|
8 |
|
9 | //dein Wert liegt jetzt zwischen i und i+1
|
10 | // also musst du zwischen zugehörigeWerte[i] und zugehörigeWerte[i+1]
|
11 | // linear interpolieren.
|
12 |
|
13 | ret=Tabelleneintraege[i]+ \
|
14 | ( Tabelleneintraege[i+1]-Tabelleneintraege[i]) / \
|
15 | (zugehörigeWerte[i+1]-zugehörigeWerte[i])*input-Tabelleneinträge[i];
|
16 | return ret;
|
17 | }
|
Zu guter Letzt:
Du kennst Festkomma-Arithmetik?
( http://de.wikipedia.org/wiki/Festkommazahl )
( http://www.mikrocontroller.net/articles/Festkommaarithmetik )
Viele Grüße
Stefan