www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Normierungs-Trick oder Float Berechnung?


Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

kann mir jemand sagen was bei ca. 30 berechnungen (jeweils einmal
dividieren und addieren, also insgesamt 60 berechnungen, nacheinander)
schneller geht (ausgehend von float zahlen mit 3 nachkommastellen):

1. berechnung komplett in float durchführen und evtl daran beteiligte
integer werte auf float zwangskonvertieren

oder

2. mit "normierungs-trick" die float werte mit 1000 multiplizieren,
berechnungen durchführen und das ergebnis wieder in float wandeln

ich hoffe ihr könnt so ungefähr verstehen wie/was ich meine :-/

mfg, Marcus

PS: programmierung in C für nen Renesas M32C mit HEW

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/forum/read-1-315021.html#new

Noch einmal, wenn Du 'float' brauchst, dann nimm 'float'. Die
ganzen 'int' oder 'long' Optimierungen bringen eventuell ein
bißchen mehr Geschwindigkeit, was aber nicht zwingend sein muß. Bei
'long' wir mit 32 Bit gerechnet, bei 'float' jedoch nur mit 24 (für
die Mantisse), was durchaus schneller sein kann !!!
Der Vorteil von 'float': man braucht sich nicht um Rundung und
Nachkommastellen zu kümmern.

Programmier Deine Routine doch einfach einmal und messe die Laufzeit;
meines Erachtens wird sie unter 1 ms liegen. Wenn das reicht, belasse
es so. Wenn nicht, versuche die Divison mit einer 1/x Multiplikation zu
lösen; das geht u.U. schneller.

Autor: Detlef A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Divisionen sind extrem aufwendig und zeitraubend. Braucht man eigentlich
auch nie (ich zumindest), außer Division mit ner Konstanten, und das
machts Du mit Multiplikation/Shiften. Wenn Du Zeit hast, nimm float,
wenn nicht überleg mal, ob Du nicht um die Division rumkommst!?

Cheers
Detlef

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke... ich seh schon, dass muss/sollte man dann testen...

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Marcus:

Ja, wenn Du genau für einen Prozessor schreibst, heisst die Devise bei
solchen Entscheidungen:

   Nicht raten, sondern messen.

Also, zwei Benchmarkprogramme schreiben. Dann nachschauen welcher
Algorhitmus schneller läuft, und diesen dann verwenden.

Wenn Du es ganz genau machen willst, kannst Du auch noch mit
verschiedenen Compiler-Optimierungs-Einstellungen testen. Entweder
systematisch alle Kombinationen einiger weniger Optimierungen
ausprobieren, oder mit einem genetischen Algorithmus die beste
Kombination aus einer vielzahl (alle) Optimierungsoptionen suchen
lassen.

Für die genetische Variante gibt es auch schon einige fertige Pakete
für den GCC (unter Linux/Unix). Die müsstest Du allerdings noch
anpassen dass die Zeiten auf dem Controller direkt gemessen werden
können.

Machbar ist das alles. Die Frage ist aber, lohnt sich der Aufwand?

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke... glaube das lohnt wirklich nicht... denke mal ich werde es evtl
einfach einmal mit float und einmal mit integer versuchen und schauen,
ob ich was messen kann...

danke!

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.