Tuesday, 31 October 2017

Schnell Mittelwert Algorithmus In C


Gegenwärtig entwickle ich ein grafisches LCD-System, um Temperaturen, Ströme, Spannungen, Energie und Energie in einem Wärmepumpensystem anzuzeigen. Die Verwendung eines grafischen LCD bedeutet, dass die Hälfte meines SRAM und 75 meines Blitzes durch einen Schirmpuffer und Schnüre verbraucht worden sind. Ich bin derzeit Anzeige min max durchschnittlichen Zahlen für Energie Um Mitternacht, wenn die tägliche Zahl zurückgesetzt wird, überprüft das System, ob der Verbrauch für den Tag über oder unter dem vorherigen Minimum oder Maximum ist, und speichert den Wert. Der Durchschnitt wird berechnet, indem der kumulative Energieverbrauch durch die Anzahl der Tage dividiert wird. Ich möchte den täglichen Durchschnitt über die letzte Woche und Monat (4 Wochen aus Gründen der Einfachheit), d. h. Derzeit geht es darum, ein Array von Werten für die letzten 28 Tage aufrechtzuerhalten und einen Durchschnitt über das gesamte Array für die monatlichen und letzten 7 Tage für wöchentlich zu berechnen. Zuerst war ich dies mit einem Array von Schwimmern (wie die Energie ist in der Form 12.12kWh), aber das war mit 28 4 Bytes 112 Bytes (5.4 von SRAM). Ich habe nichts dagegen, nur einen einzigen Dezimalpunkt der Auflösung, so dass ich geändert, um mit uint16t und die Multiplikation der Zahl mit 100. Dies bedeutet, dass 12.12 wird als 1212 dargestellt, und ich teile durch 100 für die Anzeige. Die Größe des Arrays ist jetzt auf 56 Bytes (viel besser). Es gibt keine triviale Möglichkeit, die Figur auf einen uint8t zu reduzieren, den ich sehen kann. Ich könnte den Verlust einer Dezimalstelle tolerieren (12,1kWh anstatt 12,12kWh), aber der Verbrauch ist häufig höher als 25,5kWh (255 ist der höchste Wert, der durch eine 8-Bit-Ganzzahl ohne Vorzeichen dargestellt wird). Der Verbrauch lag nie unter 10,0 kWh oder über 35,0 kWh, so daß ich 10 von den gespeicherten Zahlen subtrahieren konnte, aber ich weiß, dass wir eines Tages diese Grenzen überschreiten werden. Ich testete dann Code, 9-Bit-Werte in ein Array zu packen. Dies ergibt einen Bereich von 0-51,2 kWh und verwendet insgesamt 32 Bytes. Allerdings ist der Zugriff auf ein Array wie dieses ziemlich langsam, vor allem, wenn Sie über alle Werte iterieren müssen, um einen Durchschnitt zu berechnen. Also meine Frage ist - gibt es eine effizientere Methode der Berechnung eines gleitenden Durchschnitt mit drei Fenstern - Lebensdauer, 28 Tage und 7 Tage Effizienz bedeutet kleiner in Bezug auf SRAM Nutzung, aber ohne die Strafe von riesigen Code. Kann ich vermeiden, die Speicherung aller Werte gefragt Ich habe gedacht, und Sie haben Recht. So dass technisch macht meine Antwort falsch. Ich investiere noch mehr Zeit und Geduld. Vielleicht etwas aus der Box. Ich lasse Sie wissen, wenn ich mit etwas kommen. Wir machen so etwas viel an meinem Arbeitsplatz. Lassen Sie mich fragen. Sorry über die Verwirrung. Ndash Aditya Somani Mar 8 14 am 17:15 gibt es eine effizientere Methode der Berechnung eines gleitenden Durchschnitt mit. 28 Tage und 7 Tage. Müssen sich an 27 Tage Geschichte erinnern. Vielleicht erhalten Sie nahe genug Speicherung 11 Werte anstelle von 28 Werten, vielleicht so etwas wie: Mit anderen Worten, anstatt jedes Detail von jedem Tag für die letzten 27 Tage zu speichern, (a) speichern 7 oder so Werte der detaillierten täglichen Informationen für die Vergangenheit 7 oder so Tage, und auch (b) speichern Sie 4 oder so zusammengefasste Werte der gesamten oder durchschnittlichen Informationen für jede der letzten 4 oder so Wochen. Algorithmist: Betrachten Sie die Struktur der Gleitkomma-Darstellung eine Mantisse und ein Exponent. Die Mantisse repräsentiert die Genauigkeit, d. h. die signifikanten Stellen, und es gibt eine feste Anzahl von ihnen. Wenn Ihre Zahlen größer werden, beginnt der Exponent zu erhöhen, was bedeutet, dass die signifikanten Stellen beginnen, sich von dem Binärpunkt zu entfernen. Ndash Oliver Charlesworth Danke Es sagte, dass in dieser Übung Sie die Arbeit fortsetzen, die Sie in der vorherigen Übung gemacht haben. Wenn Sie ein besseres Programm ausführen, das die Eingabe aus einer Datei ausführt, die einige gewöhnliche Zahlen enthält, scheinen der erste Algorithmus und der zweite Algorithmus die identische Antwort zu erzeugen. Finden Sie eine Situation, wo dies nicht der Fall ist. Das ist, demonstrieren experimentell, dass der bessere Durchschnitt wirklich besser ist, auch wenn Summe nicht overflow. quot Könnten Sie mir sagen, welche Situation würde das passieren ndash In oben Code nehmen wir Zahlen wie 10000, 20000. Dh Zahlen, die eine große Anzahl von Ziffern enthalten, dann kann der Wert in der Summe seinen MAX-Wert überschreiten, was bei Ist nicht der Fall ist, da die Summe immer durch die Anzahl der Elemente geteilt wird, bevor sie gespeichert werden. Obwohl aufgrund der großen Datentypen in der Programmiersprache kann dies nicht ein Problem sein. Das, was die Experten sagen, verwenden Sie Datentyp wie pro Ihre Anwendung und Anforderung.

No comments:

Post a Comment