Festkomma-Arithmetik: Einsatz in eigenen Algorithmen und Bibliotheken



  • 					[url=/festkomma-arithmetik-einsatz-in-eigenen-algorithmen-und-bibliotheken-a-859213/][b]Festkomma-Arithmetik: Einsatz in eigenen Algorithmen und Bibliotheken[/b][/url]
    
    
    					Obwohl immer mehr MCUs über Gleitkommarechenwerke verfügen, wird Festkomma-Arithmetik in vielen Bibliotheken z. B. für digitale Signalverarbeitung oder neuronale Netze eingesetzt. Dieser Beitrag erläutert die Grundlagen der Festkomma-Arithmetik.
    
    					[url=/festkomma-arithmetik-einsatz-in-eigenen-algorithmen-und-bibliotheken-a-859213/]zum Artikel[/url]


  • 					[url=/festkomma-arithmetik-einsatz-in-eigenen-algorithmen-und-bibliotheken-a-859213/][b]Festkomma-Arithmetik: Einsatz in eigenen Algorithmen und Bibliotheken[/b][/url]
    
    
    					Obwohl immer mehr MCUs über Gleitkommarechenwerke verfügen, wird Festkomma-Arithmetik in vielen Bibliotheken z. B. für digitale Signalverarbeitung oder neuronale Netze eingesetzt. Dieser Beitrag erläutert die Grundlagen der Festkomma-Arithmetik.
    
    					[url=/festkomma-arithmetik-einsatz-in-eigenen-algorithmen-und-bibliotheken-a-859213/]zum Artikel[/url]
    


  • Mir fehlt ein bisschen der Hinweis auf Algorithmen, die in Gleitkomma kaum zu machen sind, in Festkomma aber äußerst simpel. Dazu gehört zum Beispiel der gleitende Mittelwert (ein toller und sehr schneller Tiefpassfilter ...), der bei Festkomma jeweils nur die Subtraktion nur eines alten Wertes und die Addition nur des neuen Wertes und keine Division benötigt, selbst bei beispielsweise n=1024 oder 65536. In Gleitkomma geht dieses Verfahren voll in die Hose, was die meisten jedoch nicht gleich entdecken, weil man es bei einer kleinen Probe nicht sieht (Wirkung eines Rauschintegrals).
    mfG. Tilmann Krüger



  • Mir ist nicht aus der Praxis, aber beim Durchlesen der Maschinenbefehle von ARM-Architekturen aufgefallen, dass bestimmte Befehle Überlauf-Auffang-Mechanismen haben, also automatische Sättigung. Der Umlauf vom positiven ins negative für integer ist für die meisten Algorithmen ja schlichtweg eine Katastrophe, vollkommen falsch. Einzig bei der Abbildung eines Winkels im Integerbereich von -180° bis +179.999° ist das genau richtig, weil es dort eben genau damit keine Überlaufprobleme gibt.
    Nun kann man allgemein feststellen, dass es die Programmierung in Assembler nicht mehr braucht da man mit einem guten C-Compiler eigentlich genauso gut hinkommt. Aber die C-Syntax beherrscht nicht:

    • Überlaufbehandlung, sie kennt die ARM-Befehle nicht, auch sonst keine Korrektur
    • Multiplikation int16_t * int16_t müsste eigentlich von haus aus ein int32_t - Ergebnis liefern, tut es aber nicht.
      Das ist in C so seit 1970! Da war ich zwar schon geboren, aber sau lang her. Ich kenne diesen Mangel seit den 90-gern. Warum gibt es keinen neuen Standard für C, der diese Mängel aufhebt. Haben wir doch keine schnellebige Zeit?
      Die Verwendung von Assembler ist immer prozessorspezifisch. C sollte alles unterstützen was als Schnittmenge der Prozessoren geht. Dabei kann es bei einem weniger leistungsfähigen Prozessor auch eben langsamere Lösungen geben (den Überlauf kann man auch mit Nachbehandlung erkennen). Die Algorithmen müssten für jeden Compiler in einer Standard-Header als intrinsic bereitgestellt werden. Ich gehe bald in Rente. Tut was! Oder fordert bei den Compilerherstellern. Kunde soll könig sein.
      Dr. Hartmut Schorrig


  • Ich bin mir nicht sicher, ob es nicht auch bei Integer einen Fortpflanzungsfehler der kummulativen Summe gibt, weil der addierte Neuwert immer etwas weniger abgerundet ist als der dazu passende vorher addierte Altwert (in einem oszillierenden Signal). Das Problem liegt dann vor der Bildung des Integer-Inputs in der Messwertaufnahme.
    Für Gleitkomma gibt es jedenfalls eine einfache schnelle sichere Lösung: Immer wenn im Umlauf-Buffer am Anfang wieder begonnen wird, wird zusätzlich eine Neusumme gebildet, die dann bei Erreichen der notwendigen Anzahl Werte jeweils die kummulative Summe ersetzt. Damit ist die kummulative Summe eben nicht über Stunden, Tage, Wochen kummulativ mit Fehlerfortpflanzung, sondern nach wenigen Abtastschritten (1000 .. 10000 sind wenig) immer wieder frisch.
    Wenn man einen gleitenden Mittelwert auf eine oszillierende Schwingung anwendet, dessen Frequenz sich jeweils leicht ändert, dann ist bei Gleitkomma eine exakte Berechnung möglich auch wenn die Periodendauer nicht genau ganzzahlig einer Anzahl Werte entspricht. Das könnte aber bei Festkomma auch gehen. Für Rückfragen könnte ich auch zur Vefügung stehen. Hartmut Schorrig.


Log in to reply