Wednesday 22 November 2017

Exponential Moving Average Filter Algorithmus


Ist es möglich, einen gleitenden Durchschnitt in C ohne die Notwendigkeit für ein Fenster von Proben Ive gefunden, dass ich ein bisschen optimieren kann, indem Sie eine Fenstergröße, die eine Macht von zwei, um Bit-Verschiebung statt zu teilen, aber nicht brauchen Ein Puffer wäre schön. Gibt es eine Möglichkeit, ein neues gleitendes durchschnittliches Ergebnis nur als eine Funktion des alten Ergebnisses auszudrücken und das neue Sample Definieren Sie ein Beispiel gleitender Durchschnitt, über ein Fenster von 4 Samples: Add new sample e: Ein gleitender Durchschnitt kann rekursiv implementiert werden , Aber für eine genaue Berechnung des gleitenden Durchschnitts müssen Sie sich an die älteste Eingabe Probe in der Summe (dh die a in Ihrem Beispiel) erinnern. Für eine Länge N gleitenden Durchschnitt berechnen Sie: wobei yn das Ausgangssignal ist und xn das Eingangssignal ist. Gl. (1) kann rekursiv geschrieben werden, also musst du dich immer an die Probe xn-N erinnern, um zu berechnen (2). Wie von Conrad Turner hervorgehoben, können Sie stattdessen ein (unendlich langes) exponentielles Fenster verwenden, mit dem Sie die Ausgabe nur aus der Vergangenheit und dem aktuellen Eingang berechnen können. Dies ist jedoch kein Standard (ungewichtet) gleitender Durchschnitt, sondern exponentiell Gewichteter gleitender Durchschnitt, wo Proben in der Vergangenheit ein kleineres Gewicht bekommen, aber (zumindest in der Theorie) vergisst du niemals etwas (die Gewichte werden in der Vergangenheit immer kleiner und kleiner). Ich habe einen gleitenden Durchschnitt ohne Einzelposten-Speicher für ein GPS-Tracking-Programm, das ich geschrieben habe. Ich fange mit 1 Probe an und teile mit 1, um die aktuelle avg zu bekommen. Ich füge dann eine Probe hinzu und teile mit 2 auf die aktuelle avg. Das geht weiter, bis ich die Länge des Durchschnitts erreicht habe. Jedes Mal danach füge ich die neue Probe hinzu, bekomme den Durchschnitt und beseitige diesen Durchschnitt von der Summe. Ich bin kein Mathematiker, aber das schien ein guter Weg, es zu tun. Ich dachte, es würde den Magen eines echten Mathe-Kerls drehen, aber es stellt sich heraus, dass es eine der akzeptierten Möglichkeiten ist, es zu tun. Und es geht gut Denken Sie daran, dass je höher Ihre Länge desto langsamer ist es, was Sie folgen wollen. Das mag die meiste Zeit nicht ausmachen, aber wenn man den Satelliten folgt, wenn man langsam ist, könnte der Weg weit von der aktuellen Position entfernt sein und es wird schlecht aussehen. Du hättest eine Lücke zwischen dem Sat und den hinteren Punkten. Ich wählte eine Länge von 15 aktualisiert 6 mal pro Minute, um ausreichende Glättung zu bekommen und nicht zu weit von der tatsächlichen Sat-Position mit den geglätteten Pfad-Punkten zu bekommen. Antwortete 16. November 16 um 23:03 initialize total 0, count0 (jedes Mal, wenn du einen neuen Wert sehe, dann eine Eingabe (scanf), man add totalnewValue, ein Inkrement (count), ein divide average (totalcount) Dies wäre ein gleitender Durchschnitt über Alle Eingänge Um den Durchschnitt über nur die letzten 4 Eingänge zu berechnen, würde es 4 Eingangsvariablen erfordern, vielleicht jede Eingabe in einen älteren Eingabevariablen kopieren und dann den neuen gleitenden Durchschnitt berechnen, als Summe der 4 Eingangsvariablen, geteilt durch 4 (rechte Verschiebung 2 wäre Gut, wenn alle Eingänge waren positiv, um die durchschnittliche Berechnung beantwortet Feb 3 15 um 4:06 Das wird tatsächlich berechnen den Gesamtdurchschnitt und NICHT der gleitende Durchschnitt. Wie Zähler wird größer die Auswirkungen einer neuen Eingabe Probe wird verschwindend klein ndash Hilmar Feb 3 15 at 13:53 Ihre Antwort 2017 Stack Exchange, IncIm Codierung etwas in dem Moment, wo ich eine Reihe von Werten im Laufe der Zeit von einem Hardware-Kompass. Dieser Kompass ist sehr genau und Updates sehr oft, mit dem Ergebnis, dass, wenn es leicht wackelt , Ich am Ende mit dem seltsamen Wert, der wild unvereinbar mit seinen Nachbarn ist. Ich möchte diese Werte ausgleichen. Nachdem ich etwas gelesen habe, scheint es, dass das, was ich will, ein Hochpassfilter, ein Tiefpassfilter oder ein gleitender Durchschnitt ist. Gleitender Durchschnitt kann ich mit unten, halten Sie einfach eine Geschichte der letzten 5 Werte oder was auch immer, und verwenden Sie den Durchschnitt dieser Werte stromabwärts in meinem Code, wo ich war einmal nur mit dem neuesten Wert. Das heißt, ich denke, glätte diese Wackeln schön, aber es schlägt mich, dass seine wahrscheinlich ziemlich ineffizient, und dies ist wahrscheinlich eines der Bekannten Probleme zu richtigen Programmierer, auf die theres eine wirklich ordentliche Clever Math Lösung. Ich bin aber einer dieser schrecklichen, selbstgelehrten Programmierer ohne einen Fetzen der formalen Erziehung in irgendetwas, das sogar vage mit CompSci oder Mathematik verwandt ist. Das Lesen um ein bisschen deutet darauf hin, dass dies ein High-oder Tiefpass-Filter sein kann, aber ich kann nicht alles finden, was erklärt, in verständlich für einen Hack wie mich, was die Wirkung dieser Algorithmen wäre auf eine Reihe von Werten, geschweige denn, wie die Mathematik Arbeitet. Die hier gegebene Antwort Zum Beispiel, technisch beantwortet meine Frage, aber nur in verständlich für diejenigen, die wahrscheinlich schon wissen, wie das Problem zu lösen. Es wäre eine sehr schöne und kluge Person in der Tat, die die Art von Problem erklären könnte, das ist, und wie die Lösungen arbeiten, im Sinne verständlich für einen Kunst-Absolvent. Fragte am 21. September um 13:01 Wenn dein gleitender Durchschnitt lang sein muss, um die erforderliche Glättung zu erreichen, und du brauchst wirklich keine besondere Form des Kernels, dann bist du besser dran, wenn du einen exponentiell verfallenden gleitenden Durchschnitt nimmst: wo du bist Wählen Sie winzig eine passende Konstante (zB wenn Sie winzige 1- 1N wählen, wird es die gleiche Menge an Mittelwert wie ein Fenster der Größe N haben, aber anders verteilt über ältere Punkte). Jedenfalls, da der nächste Wert des gleitenden Durchschnitts nur von der vorherigen und Ihren Daten abhängt, muss man keine Warteschlange behalten. Und du kannst das daran denken, so etwas zu tun, Nun, ich habe einen neuen Punkt, aber ich vertraue es nicht wirklich, also werde ich 80 meiner alten Schätzung der Messung behalten und nur diesem neuen Datenpunkt vertrauen So ziemlich das gleiche wie zu sagen, Nun, ich vertraue nur diesem neuen Punkt 20, und ich benutze 4 andere Punkte, die ich vertraue, die gleiche Menge, außer dass anstatt explizit die 4 anderen Punkte, youre vorausgesetzt, dass die Mittelung Sie letzte Mal War sinnvoll, also kannst du deine bisherige Arbeit benutzen. Antwortete Sep 21 10 at 14:27 Hey, ich weiß, das ist 5 Jahre zu spät, aber danke für eine tolle Antwort. Ich arbeite an einem Spiel, bei dem sich der Klang auf der Grundlage deiner Geschwindigkeit ändert, aber wegen des Spiels auf einem langsamen Computer, würde die Geschwindigkeit wild schwanken, was für das Lenken gut war, aber super nervig in Sachen Sound. Dies war eine wirklich einfache und billige Lösung für etwas, was ich dachte, wäre ein wirklich komplexes Problem. Wenn du versuchst, den gelegentlichen ungeraden Wert zu entfernen, ist ein Tiefpassfilter der beste der drei Optionen, die du identifiziert hast. Deutsch:. Englisch: emagazine. credit-suisse. com/app/art...1007 & lang = en Wenn Sie versuchen, den gelegentlichen ungeraden Wert zu entfernen, Tiefpaßfilter erlauben Niedergeschwindigkeitsänderungen, wie z. B. die, die durch das Drehen eines Kompasses von Hand verursacht werden, während die Absenkung von Hochgeschwindigkeitsänderungen, wie z. B. durch Stöße auf der Straße verursacht wird. Ein gleitender Durchschnitt wird wahrscheinlich nicht ausreichen, da die Effekte eines einzelnen Blips in Ihren Daten mehrere nachfolgende Werte beeinflussen werden, abhängig von der Größe Ihres gleitenden Durchschnittsfensters. Wenn die ungeraden Werte leicht erkannt werden, können Sie sogar besser mit einem Glitch-Entferner-Algorithmus, der sie völlig ignoriert: Hier ist ein Guick-Diagramm zu illustrieren: Die erste Grafik ist das Eingangssignal, mit einem unangenehmen Glitch. Die zweite Grafik zeigt die Wirkung eines 10-prozentigen gleitenden Durchschnitts. Der endgültige Graph ist eine Kombination aus dem 10-Sample-Durchschnitt und dem oben beschriebenen einfachen Glitch-Detection-Algorithmus. Wenn der Glitch erkannt wird, wird anstelle des Istwertes der 10-Sample-Durchschnitt verwendet. Antwortete Sep 21 10 um 13:38 Schön erklärt, und Bonuspunkte für die Grafik) ndash Henry Cooke Sep 22 10 at 0:50 Wow. Selten sah man so eine nette Antwort ndash Muis Jun 4 13 um 9:14 Der gleitende Durchschnitt ist ein Tiefpassfilter. Ndash nomen Oct 21 13 at 19:36 Versuchen Sie, ein runningstreaming Median statt. Ndash kert Apr 25 14 at 22:09 Gleitender Durchschnitt kann ich mit. Aber es schlägt mich, dass seine wahrscheinlich ziemlich ineffizient. Theres wirklich kein Grund ein gleitender Durchschnitt sollte ineffizient sein. Sie halten die Anzahl der Datenpunkte, die Sie in irgendeinem Puffer (wie eine kreisförmige Warteschlange) wünschen. Auf jedem neuen Datenpunkt kommst du den ältesten Wert und subtrahiere ihn von einer Summe und schiebe den neuesten und führe ihn der Summe hinzu. So bringt jeder neue Datenpunkt wirklich nur einen Poppush, eine Addition und eine Subtraktion mit sich. Ihr gleitender Durchschnitt ist immer diese Verschiebungssumme geteilt durch die Anzahl der Werte in Ihrem Puffer. Es wird ein bisschen schwieriger, wenn Sie Daten gleichzeitig von mehreren Threads empfangen, aber da Ihre Daten von einem Hardwaregerät kommen, das mir höchst zweifelhaft erscheint. Oh und auch: schreckliche, selbstgelehrte Programmierer vereinen sich) Der gleitende Durchschnitt schien mir ineffizient zu sein, weil man einen Puffer von Werten speichern muss - besser, nur einige Clever Maths mit deinem Eingabewert und dem aktuellen Wertsatz zu machen, denke ich, wie der exponentielle gleitende Durchschnitt Arbeitet. Eine Optimierung, die für diese Art von gleitendem Durchschnitt gesehen wird, beinhaltet die Verwendung eines festen Längen-Warteschlangen-Verstärkers einen Zeiger auf, wo Sie in dieser Warteschlange sind, und einfach nur den Zeiger umschalten (mit oder einem if). Voila Kein teurer Pushpop Macht zu den Amateuren, Bruder ndash Henry Cooke Sep 22 10 bei 0:54 Henry: Für einen geradlinigen gleitenden Durchschnitt brauchst du den Puffer einfach so, dass du weißt, welcher Wert geknallt wird, wenn der nächste Wert gedrückt wird. Das heißt, die feste Länge Warteschlange amp ein pointerquot Sie beschreiben ist genau das, was ich meinte durch quotcircular queue. quot That39s warum ich sagte, es ist nicht ineffizient. Was meinten Sie, dass ich meinte, und wenn Ihre Antwort ist Quanten-Array, dass verschiebt seine Werte wieder auf jedem indizierten Removequot (wie Std :: Vektor in C). Nun, dann I39m so verletzt ich don39t will sogar noch mehr mit dir reden) ndash Dan Tao Sep 22 10 bei 1:58 Henry: Ich weiß nicht über AS3, aber ein Java Programmierer hat auch Sammlungen wie CircularQueue zu seiner Verfügung (I39m nicht ein Java-Entwickler, also I39m sicher, es gibt bessere Beispiele da draußen, die genau das, was ich von einer schnellen Google-Suche gefunden habe), die genau die Funktionalität implementiert, über die wir reden. I39m ziemlich zuversichtlich, die Mehrheit der Mittel-und Low-Level-Sprachen mit Standard-Bibliotheken haben etwas ähnliches (z. B. in dort39s QueueltTgt). Jedenfalls war ich selbst Philosophie. alles ist vergeben. Ndash Dan Tao Sep 12 10 um 12:44 Ein exponentiell abklingender gleitender Durchschnitt kann von Hand mit nur dem Trend berechnet werden, wenn man die richtigen Werte verwendet. Siehe viermilab. chhackdiete4 für eine Idee, wie man das schnell mit einem Stift und Papier macht, wenn man nach exponentiell geglätteten gleitenden Durchschnitt mit 10 Glättung sucht. Aber da hast du einen Computer, du möchtest wahrscheinlich Binärverschiebung im Gegensatz zur Dezimalverschiebung machen. Auf diese Weise ist alles, was du brauchst, eine Variable für deinen aktuellen Wert und eine für den Durchschnitt. Der nächste Durchschnitt kann dann berechnet werden. Antwortete am 21. September 10 um 14:39 Uhr eine Technik namens ein Bereich Tor, das gut funktioniert mit Low-Auftreten falsche Proben. Vorausgesetzt, die Verwendung einer der oben erwähnten Filtertechniken (gleitender Durchschnitt, exponentiell), sobald man genügend Geschichte hat (eine Zeitkonstante), kannst du das neue, eingehende Datenmuster für Angemessenheit testen, bevor es der Berechnung hinzugefügt wird. Manche Kenntnisse über die maximal vernünftige Änderungsrate des Signals sind erforderlich. Wird die Rohprobe mit dem letzten geglätteten Wert verglichen, und wenn der Absolutwert dieser Differenz größer als der zulässige Bereich ist, wird diese Probe ausgelöst (oder durch eine Heuristik ersetzt, zB eine Vorhersage auf der Grundlage der Steigungsdifferenz oder des Trends Vorhersage-Wert aus doppelter exponentieller Glättung) beantwortet Apr 30 16 at 6: 56C Algorithmus für Null-Latenz exponentiell gleitenden Durchschnitt Letzte Änderung: 2012-08-13 Ich habe versucht, eine Niederfrequenz-Cutoff in c, die im Wesentlichen nimmt einen Strom von Zahlen und Glättet den Ausgang (filtert den Hochfrequenz-Bewegungsjitter aus), aber es ist wichtig, dass die vorderen gewichteten Zahlen sofort als die Daten zeitkritisch betrachtet werden (es ist, eine Bewegungssimulationsbasis mit der Ausgabe von einem Bit der Spielsoftware zu steuern). Ich habe eine funktionierende gewichtete gleitende durchschnittliche Algoithm, aber könnte mit etwas ein wenig mehr reaktionsschnell am vorderen Ende zu tun, und ich fand dies: - Der Pseudocode gibt es wie folgt: Eingaben: Preis (NumericSeries), Periode (NumericSimple) Variablen: Faktor (0), Verzögerung (0) Wenn CurrentBar lt 1 dann ZLEMA beginnen Preisfaktor 2 (Periode1) Verzögerung (Periode-1) 2 Ende sonst beginnen ZLEMA-Faktor (2Price-Pricelag) (1-Faktor) ZLEMA1 Ende Ive übersetzt es in Zu C und mein Code ist wie folgt: Allerdings scheint es nicht so gut zu verhalten wie Id erwarten. Es scheint fast da zu sein, aber manchmal bekomme ich einen etwas niedrigeren Wert als alle Artikel in der Warteschlange (wenn sie alle höher sind). Meine Warteschlange und die Anzahl der Artikel in ihr werden als Parameter übergeben, wobei die jüngste an der Front zu allen Zeiten ist, auch ich passiere einen inkrementierenden Zähler beginnend bei 0, wie es die Funktion verlangt. Im nicht sicher Ive interpretiert die Bedeutung von ZLEMA1 richtig als seine nicht klar in seinem Pseudocode, so Ive davon ausgegangen, dass dies die letzten Anrufe zlema und auch Im Annahme Preis tatsächlich bedeutet Preis0. Vielleicht habe ich das falsch verstanden Bin ich eigentlich die tatsächlichen zlema berechneten Werte zurück zu meiner ursprünglichen Warteschlange kopieren, bevor ich den nächsten Anruf ändere, ändere ich nicht die ursprüngliche Warteschlange an alle anderen als nur das Verschieben aller Werte ein bis zum Ende und das Einfügen der spätesten am Anfang . Der Code, den ich benutze, um dies zu tun ist: Wäre sehr dankbar, wenn jemand mit einem besseren Verständnis der Mathematik könnte bitte Verstand überprüfen, dies für mich zu sehen, ob ich etwas etwas falsch habe Danke so viel im Voraus, wenn Sie helfen können Zuerst danke alles für Ihre Eingabe, sehr geschätzt Das macht Sinn, denke ich, also nehme ich dann das Beste an, auf das ich hoffen kann, ist einfach ein exponentieller gleitender Durchschnitt, der dort akzeptiert wird, wird eine kleine Verzögerung sein, aber das wird durch die schwerere Frontgewichtung minimiert, als in typisch gewichtet gegeben Gleitender Durchschnitt habe ich diesen Algorithmus auch, aber ein ähnliches Problem, dass die Werte nicht ganz richtig erscheinen (es sei denn, dies ist die Natur der Formel). Zum Beispiel, sagen, mein Array enthält 16 Werte, alle 0.4775 - die Ausgabe ist 0.4983, aber Id erwarten, dass es 0.4775 Ist dies Blick auf Sie. Exponentieller bewegter Durchschnitt. Float ema (float vals, int numvals, int currentSample) statischer Floatfaktor 0 statischer Float lastema 0 float ema if (currentSample lt 1) ema vals0 Faktor 2.0 ((float) numvals) 1.0) sonst ema (Faktor vals0) ((1.0 - Faktor) lastema) lastema ema return ema Umgekehrt ist manchmal der Ausgang niedriger als jeder einzelne der Eingänge, auch wenn alle höher sind. Es heißt genauso wie zlema (.) Oben, mit einem inkrementierenden Zähler. Die Formel und der Pseudocode für diesen hier sind: - autotradingstrategy. wordpress20091130exponential-moving-average Danke nochmal, entschuldigung für mein Missverständnis von einigen der Grundlagen: (Mit freundlichen Grüßen, Chris J Wie für den Code, den ich gepostet habe, bist du richtig über die Array-Größe Situation: Das sollte leicht behoben werden. Für Ihre Fragen: 1) Die Filterkonstante stellt eine Frequenzabschaltung dar. Ich habe eine digitale Signalverarbeitung (DSP) für diese Technik verwendet. En. wikipedia. orgwi kiLow-pas sfilter ist eine einfache erklärung. Sie wollen den Abschnitt "Diskrete Zeit". In meinem Fall ist das A die RC-Konstante, über die sie sprechen. Also die Häufigkeit, die es ausschneidet, liegt über 1 (2piA). Wenn Sie nicht ein Verständnis der Frequenz-Domain-Theorie haben, kann dies kompliziert werden. In Ihrem Fall, Je höher Sie machen A, desto niedriger die Frequenz, die dieser Filter erlaubt, was bedeutet, dass es die Kurve mehr und mehr glatt wird. Je niedriger du es machst, desto mehr Lärm, das im System erlaubt ist. Denken Sie daran, dass ein größerer oder gleicher Wert wirksam sein muss. Ich habe wieder die XLS wieder, diesmal ohne die ändernden rand () Zahlen. Passen Sie die A-Konstante an und beobachten Sie, wie es sich um die Hochfrequenzvariationen handelt. 2) Der letzte Punkt des Eingabe-Arrays hat den aktuellsten Wert. 3) Das gleiche gilt für das Ausgabe-Array. Der letzte ist der aktuellste Wert. 5) Die NUMVALS ist willkürlich. Sie können kontinuierlich hinzufügen, um die Eingabe-und Ausgabe-Array so oft wie youd wie und es würde nicht Effekt der Filter. Insbesondere habe ich 49 Punkte benutzt. Aber ich kann die letzten 20 leicht löschen und die ersten 29 Ausgänge bleiben gleich. Die Funktion basiert nicht darauf, wie viele Punkte verwendet werden. Ich möchte erwähnen, dass ich diese Funktion für eine einmalige Umwandlung entwickelt habe. Wenn du eine Umwandlung für den nächsten Wert machen wolltest, kannst du etwas einfacheres ausprobieren (wie beigefügt). Wieder im rostig auf c. Ich hoffe das ist richtig. Das einzige, was Sie benötigen, ist die Eingabe und Filter konstant. Lassen Sie mich wissen, wenn dies hilft. Ist es möglich, einen gleitenden Durchschnitt in C ohne die Notwendigkeit für ein Fenster von Proben Ive festgestellt, dass ich ein bisschen optimieren können, indem Sie eine Fenstergröße, die eine Macht von zwei, um Bit-Verschiebung zu ermöglichen Anstatt zu teilen, aber nicht brauchen einen Puffer wäre schön. Gibt es eine Möglichkeit, ein neues gleitendes durchschnittliches Ergebnis nur als eine Funktion des alten Ergebnisses auszudrücken und das neue Sample Definieren Sie ein Beispiel gleitender Durchschnitt, über ein Fenster von 4 Samples: Add new sample e: Ein gleitender Durchschnitt kann rekursiv implementiert werden , Aber für eine genaue Berechnung des gleitenden Durchschnitts müssen Sie sich an die älteste Eingabe Probe in der Summe (dh die a in Ihrem Beispiel) erinnern. Für eine Länge N gleitenden Durchschnitt berechnen Sie: wobei yn das Ausgangssignal ist und xn das Eingangssignal ist. Gl. (1) kann rekursiv geschrieben werden, also musst du dich immer an die Probe xn-N erinnern, um zu berechnen (2). Wie von Conrad Turner hervorgehoben, können Sie stattdessen ein (unendlich langes) exponentielles Fenster verwenden, mit dem Sie die Ausgabe nur aus der Vergangenheit und dem aktuellen Eingang berechnen können. Dies ist jedoch kein Standard (ungewichtet) gleitender Durchschnitt, sondern exponentiell Gewichteter gleitender Durchschnitt, wo Proben in der Vergangenheit ein kleineres Gewicht bekommen, aber (zumindest in der Theorie) vergisst du niemals etwas (die Gewichte werden in der Vergangenheit immer kleiner und kleiner). Ich habe einen gleitenden Durchschnitt ohne Einzelposten-Speicher für ein GPS-Tracking-Programm, das ich geschrieben habe. Ich fange mit 1 Probe an und teile mit 1, um die aktuelle avg zu bekommen. Ich füge dann eine Probe hinzu und teile mit 2 auf die aktuelle avg. Das geht weiter, bis ich die Länge des Durchschnitts erreicht habe. Jedes Mal danach füge ich die neue Probe hinzu, bekomme den Durchschnitt und beseitige diesen Durchschnitt von der Summe. Ich bin kein Mathematiker, aber das schien ein guter Weg, es zu tun. Ich dachte, es würde den Magen eines echten Mathe-Kerls drehen, aber es stellt sich heraus, dass es eine der akzeptierten Möglichkeiten ist, es zu tun. Und es geht gut Denken Sie daran, dass je höher Ihre Länge desto langsamer ist es, was Sie folgen wollen. Das mag die meiste Zeit nicht ausmachen, aber wenn man den Satelliten folgt, wenn man langsam ist, könnte der Weg weit von der aktuellen Position entfernt sein und es wird schlecht aussehen. Du hättest eine Lücke zwischen dem Sat und den hinteren Punkten. Ich wählte eine Länge von 15 aktualisiert 6 mal pro Minute, um ausreichende Glättung zu bekommen und nicht zu weit von der tatsächlichen Sat-Position mit den geglätteten Pfad-Punkten zu bekommen. Antwortete 16. November 16 um 23:03 initialize total 0, count0 (jedes Mal, wenn du einen neuen Wert sehe, dann eine Eingabe (scanf), man add totalnewValue, ein Inkrement (count), ein divide average (totalcount) Dies wäre ein gleitender Durchschnitt über Alle Eingänge Um den Durchschnitt über nur die letzten 4 Eingänge zu berechnen, würde es 4 Eingangsvariablen erfordern, vielleicht jede Eingabe in einen älteren Eingabevariablen kopieren und dann den neuen gleitenden Durchschnitt berechnen, als Summe der 4 Eingangsvariablen, geteilt durch 4 (rechte Verschiebung 2 wäre Gut, wenn alle Eingänge waren positiv, um die durchschnittliche Berechnung beantwortet Feb 3 15 um 4:06 Das wird tatsächlich berechnen den Gesamtdurchschnitt und NICHT der gleitende Durchschnitt. Wie Zähler wird größer die Auswirkungen einer neuen Eingabe Probe wird verschwindend klein ndash Hilmar Feb 3 15 um 13:53 Ihre Antwort 2017 Stack Exchange, Inc

No comments:

Post a Comment