Forum: Compiler & IDEs Durchschnitt speichersparend berechnen


von Matthias Blaicher (Gast)


Lesenswert?

Hallo,
ich suche eine Möglichkeit von mehr als hundert Werten einen Durchnitt
zu bilden. Das aufsummieren und dann teilen geht nicht, da der Speicher
nicht reicht.

Hat jemand eine Idee? (((a+b)/2)+c)/2)+d)/2 geht doch nicht oder?

von peter (Gast)


Lesenswert?

Hi,
so könnte es gehen:

int messdurchnitt=0; //durchsnitt der messwerte
int messwert;  // aktueller adc value
for(i=0;i<100;i++){
messdurchschnitt = ( i*messdurchschnitt + messwert ) / (i+1);
}

Gruss
peter

von Matthias Blaicher (Gast)


Lesenswert?

Komisch, bei mir will das nicht gehen....

von Matthias Blaicher (Gast)


Lesenswert?

jetzt geht's die Typen musste ich erst umwandeln

von Matthias Blaicher (Gast)


Lesenswert?

Jetzt gehts - immer diese Typen und ihre Umwandlung....

von peter (Gast)


Lesenswert?

Hi,
falls du 10 bit adc werte hasst bietet sich noch an die Formel
umzuschreiben da 100 * 1024 > 65535 ist.

.
.
.
messdurchschnitt = ( i / ( i + 1 ) ) * ( messwert + ( y / i) );
.
.
.

von peter (Gast)


Lesenswert?

sorry vertippt:
so ists richtig
.
.
.
messdurchscnitt = (i/(i+1)) * (messdurchschnitt+(messwert/i));
.
.
.

peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.