Heb dir die Summe auf.
Am Beispiel von 5 zu mittelnden Werten
v1 v2 v3 v4 v5
Der Mittelwert berechnet sich zu
m = ( v1 + v2 + v3 + v4 + v5 ) / 5
kommt jetzt ein neuer Wert v6 hinzu, dann fällt v1
aus der Rechnung raus:
m = ( v2 + v3 + v4 + v5 + v6 ) / 5
Wenn du jetzt die beiden Summierungen betrachtest, dann
sind die im wesentlichen gleich. Nur in der zweiten Summe
kommt kein v1 vor, dafür aber v6. Die Summanden v2, v3, und v4
sind aber gleich und an deren Summe ändert sich nichts.
Aus
s = v1 + v2 + v3 + v4 + v5
m = s / 5
ergibt sich daher beim Austauschen von v1 durch v6
s = s - v1 + v6
m = s / 5
auf die Art musst du nicht mehr (in deinem Beispiel)
nicht mehr 40 Werte aufsummieren, sondern du nimmst die
vorhergehende Summe ziehst das erste Element wieder ab
und addierst dafür das letzte hinzu.
1 | float mittel(float aktuell)
|
2 | {
|
3 | static u08 x=0;
|
4 | static float value[40];
|
5 | static float ergebnis=0;
|
6 |
|
7 | ergebnis = ergebnis - value[x] + aktuell;
|
8 | value[x] = aktuell;
|
9 |
|
10 | x = ( x + 1 ) % 40;
|
11 |
|
12 | return ergebnis / 40.0;
|
13 | }
|