Ist dein Wert INTEGRAL immer 3 (oder zumindest nicht wesentlich
größer als 3).
Wenn ja, dann würde ich gar nicht lang umtun und das straight
Forward machen
1 | #define INTEGRAL 3
|
2 |
|
3 | float integralWert(float Value)
|
4 | {
|
5 | float iValue = 0;
|
6 | static float lastValue[INTEGRAL];
|
7 | static u08 count = 0;
|
8 |
|
9 | lastValue[count++] = Value;
|
10 | count %= INTEGRAL;
|
11 | for( i = 1; i < INTEGRAL; ++i )
|
12 | iValue += lastValue[i] - lastValue[i-1];
|
13 |
|
14 | return iValue / INTEGRAL;
|
15 | }
|
Alleine durch das Fortfallen einer Division gewinnst du soviel
Zeit, dass du dir eine Menge anderer Berechnungen erlauben kannst.
Ausserdem hast du den Vorteil, dass sich Rundungsfehler auf die
Art über längere Zeit gesehen nicht aufsummieren.